在Knockout视图模型定义之外设置属性值

时间:2012-02-27 23:42:24

标签: javascript knockout.js

我有一个如下定义的Knockout视图模型:

function viewModel () {
    var self = this;

    self.myName = ko.observable();
    self.myValue = ko.observable("10");
};

现在我需要在点击链接时更改视图模型的值,如下所示:

$('a.treeitem').live("click", function (e) {
    e.preventDefault();
    viewModel.myValue("20"); // this line does not work
});

但是,我无法找到设置值的正确方法,Chrome控制台会显示以下消息: 未捕获TypeError:对象函数viewModel(){...}没有方法'myValue'

2 个答案:

答案 0 :(得分:23)

您可以将视图模型另存为如下变量:

window.vm = new viewModel();
ko.applyBindings(vm);

$('a.treeitem').live("click", function (e) {
    e.preventDefault();
    window.vm.myValue("20");
});

每当您从window.vm读取时,您将从viewModel对象的实际实例中读取

答案 1 :(得分:2)

实际上,我想要做的就是在视图模型定义中完成,所以我可以将我的代码更改为:

function viewModel () {
    var self = this;

    self.myName = ko.observable();
    self.myValue = ko.observable("10");

    $('a.treeitem').live("click", function (e) {
        e.preventDefault();
        self.myValue("20");
    });
};

现在一切正常。有时,正确的方式真正是一个简单的方法。