在创建模块时将订阅初始化为 ko.subscrepable

Initialize subscriptions to ko.subscribable at module creation

本文关键字:初始化 ko subscrepable 创建 模块      更新时间:2023-09-26

我有使用揭示模块模式实现的视图模型。我正在使用全局敲除订阅来实现这些之间的数据解耦传递。我现在正在做的是在主视图模型中创建一个视图模型的实例:

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 时初始化订阅?这样我就可以避免公共初始化函数。

有没有办法在创建视图模型时初始化订阅?

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

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
    }
}