在模块创建时初始化对ko.subscribable的订阅

时间:2016-03-19 20:39:18

标签: javascript knockout.js publish-subscribe revealing-module-pattern

我有使用Revealing Module Pattern实现的ViewModel。我正在使用全局knockout subscribable来实现这些之间的数据的分离传递。我现在正在做的是,在master-ViewModel中创建一个ViewModel的实例:

NameSpace.MasterViewModel = function(){
    var viewModel = new viewModel(),
        initSubscription = function(){
            viewModel.initSubscription();
        };

    return {
        initSubscription: initSubscription
    }
}

并在ViewModel中初始化订阅,如下所示:

NameSpace.ViewModel = function(){
    var data,
        initSubscription = function(){
            ko.postbox.subscribe( "New Data"function(newData){
                this.data = newData;
            }, this);
        };

    return {
        data: data,
        initSubscription: initSubscription
    }
}

这有效,但我想知道是否有办法在创建ViewModel时初始化订阅?这样我就可以避免使用公共初始化函数了。

1 个答案:

答案 0 :(得分:0)

  

有没有办法在创建ViewModel时初始化订阅?

为什么确定。只需在您声明的模块声明和返回它之间订阅:

NameSpace.ViewModel = function(){
    var data;
    var self = this;
    var initSubscription = function(){
            NameSpace.Postbox.subscribe(function(newData){
                self.data = newData;
            }, this, "New Data");
        };

    initSubscription(); // <-- does exactly what you ask

    return {
        data: data,
        initSubscription: initSubscription  // <-- might be superfluous now
    }
}