没有任何参数调用ko.applyBindings是否安全?

时间:2013-02-15 21:32:54

标签: knockout.js

这是我在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”。

2 个答案:

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