YUI,不是小部件的可实例化模块?

时间:2013-12-12 01:23:00

标签: yui yui3

如果我想要一个可实例化的模块,比如说,一个处理在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中使用方法,这些方法将是全局变量,缺少初始化器等等。

1 个答案:

答案 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
});

尝试一下:http://jsfiddle.net/B62nu/