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