2013-12-12 8 views
2

인스턴스화 가능한 모듈을 원하면 subcookies에 환경 설정 저장을 처리하는 모듈이 필요하고 기본 쿠키를 구성 가능하게하고 싶지만 위젯이되고 싶지는 않습니다 ... 어떤 패턴 유이와 함께 사용해야합니까?YUI, 위젯이 아닌 인스턴스화 할 수있는 모듈?

최종 코드는 무엇인가해야한다 :

Y.use('my-pref-manager', function(Y){ 
    var A = Y.my-pref-manager.prefStore('A"), 
     B = Y.my-pref-manager.prefStore('B"); 
    // A and B are now loaded with the contents of cookies A and B, if they exist 
    A.set('xy', 123); 
}); 

내 모듈 내에서 위젯을 만들거나 내가 전역 및 부족 초기화 될 것입니다 내-방법으로 직접 방법을 사용할 필요가 지금까지 중 발견 패턴을,

답변

0

이렇게하는 방법은 다양합니다. 아래와 같이 Y.Base.create을 사용하면됩니다. 코드가 제작 준비 상태가 아니거나 제대로 작동하지 않을 수도 있지만 위젯이 아닌 모듈을 만드는 방법에 대한 답변이 되었기를 바랍니다.

아래 코드는 Y.Base을 확장하는 모듈을 만듭니다. 이것은 우리가 Attributes 및 기타 멋진 것들을 사용하자. doc for Y.Base을 확인하십시오.

YUI.add('my-pref-manager', function (Y) { 

    var PrefManager = Y.Base.create('myPrefManager', Y.Base, [], { 

     initializer: function() { 
      this.after('prefsChange', this.changePref); 
     }, 

     changePref: function (e) { 
      Y.Cookie.setSub(this.get('prefStore'), e.subAttrName, this.get(e.subAttrName)); 
     }, 

     setPref: function (name, val) { 
      this.set('prefs.'+name, val); 
     }, 

     getPref: function (name) { 
      return this.get('prefs.'+name); 
     } 


    }, { 
     ATTRS: { 
      prefStore: { 
       value: null, 
       setter: function (val) { 
        return Y.Cookie.set(val, val); 
       } 
      }, 
      prefs: { 
       value: {} 
      } 
     } 
    }); 

    Y.namespace('My').PrefManager = PrefManager; 

}, '0.0.1', { 
    requires: ['base', 'cookie'] 
}); 

YUI().use('my-pref-manager', function (Y) { 
    var A = new Y.My.PrefManager({prefStore: 'userPrefs'}), 
     B = new Y.My.PrefManager({prefStore: 'displayPrefs'}); 

    A.setPref('x', 3); 
    A.setPref('y', 54); 

    B.setPref('tty', 7); 

    console.log(A.getPref('x')); // 3 
}); 

그것을 밖으로 시도 : http://jsfiddle.net/B62nu/