如果我想要一个可实例化的模块,比如说,一个处理在subcookies中存储首选项的模块,我希望主cookie可以配置,但我不希望它是一个小部件......什么我应该和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 );
});
到目前为止,我发现在my-module中创建小部件的模式,或者我必须直接在my-method中使用方法,这些方法将是全局变量,缺少初始化器等等。
答案 0 :(得分:0)
有很多方法可以做到这一点。您可以使用Y.Base.create
执行此操作,如下所示。代码可能不是生产就绪,甚至可能正常工作,但希望它能够解决如何在不使用Widget的情况下创建模块的问题。
下面的代码创建了一个扩展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
});