1

这是我可以在 ko.applyBindings() 上找到的唯一官方文档:

http://knockoutjs.com/documentation/observables.html

这不是一份真正的正式书面文件,它准确地说明了什么是可选的/等。在测试中,调用 ko.applyBindings() 似乎允许在全局范围内进行绑定,并且看起来工作正常。有没有人研究过源代码(或者比我更了解 KO),知道这是否安全?有性能问题吗?

这是我正在处理的 SPA 的“应用程序”对象的开始:

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),将数据绑定限制到模型......但我有点喜欢能够绑定到任何东西的自由,并且不介意(甚至喜欢)输入应用程序。 viewModels.main 在我的代码中,而不是“main”。

4

2 回答 2

2

通过使用ko.applyBindings(),Knockout 不会知道您的视图模型。$root不会被设置,也不会$data在根级别。显然,您不能简单地不引用这些变量。事件绑定也传递$data给事件处理函数,在本例中为undefined.

于 2013-02-15T21:56:43.257 回答
0

仅供参考 - 这是我更新的应用程序(显然仍在进行中):

我发现 self:我在原始代码中的 this 指向窗口,所以显然这是一个坏主意,也是我在尝试 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);
}
}
于 2013-02-15T22:06:25.967 回答