这是我在ko.applyBindings()上找到的唯一官方文档:
http://knockoutjs.com/documentation/observables.html
这不是一个真正的正式书面文件,它确切地说明了什么是可选/等。在测试中,似乎调用ko.applyBindings()允许在全局范围上绑定,并且它似乎工作正常。有没有人研究过源代码(或者比我更了解KO),知道这是否安全?任何性能问题?
这是我正在处理的SPA的“app”对象的开始:
var app = {
self: this,
datacontext: new DataContext(),
dataservice: new DataService(),
viewModels: {
main: new MainViewModel(),
folderDetails: new FolderDetailsViewModel()
},
init: function() {
ko.applyBindings();
Sammy(function() {
this.get('#:folder', function() {
self.doFolderRoute(this.params.folder);
});
// Override this function so that Sammy doesn't mess with forms
this._checkFormSubmission = function(form) {
return (false);
};
}).run();
},
doFolderRoute: function(id) {
console.log("doFolderRoute: " + id);
}
}
我可以做ko.applyBindings(self.viewModels),限制数据绑定到模型......但我有点像能够绑定到任何东西的自由而不介意(甚至喜欢)打字在我的代码中输出app.viewModels.main,而不仅仅是“main”。
答案 0 :(得分:2)
使用ko.applyBindings()
,Knockout将无法了解您的视图模型。 $root
将不会被设置,$data
也不会设置在根级别。显然,你根本不能引用那些变量。事件绑定也将$data
传递给事件处理函数,在本例中为undefined
。
答案 1 :(得分:0)
仅供参考 - 这是我更新的应用程序(显然仍在进行中):
我想出了自己:我在原始代码中指向窗口,所以很明显这是一个坏主意,当我尝试ko.applyBindings(self.viewModels)时,我得到了奇怪的结果。
var app = {
datacontext: new DataContext(),
dataservice: new DataService(),
viewModels: {
main: new MainViewModel(),
folderDetails: new FolderDetailsViewModel()
},
init: function() {
ko.applyBindings(app.viewModels);
Sammy(function() {
this.get('#:folder', function() {
self.doFolderRoute(this.params.folder);
});
// Override this function so that Sammy doesn't mess with forms
this._checkFormSubmission = function(form) {
return (false);
};
}).run();
widgetLib.init();
},
doFolderRoute: function(id) {
console.log("doFolderRoute: " + id);
}
}