将Base2与KnockoutJS视图模型一起使用

时间:2011-10-24 15:27:23

标签: javascript knockout.js base

我使用Base2作为一种手段,允许我们在系统中轻松进行继承,以及使用KnockoutJS进行一些UI交互。

我们已经为ViewModels

定义了一个基类
BaseViewModel = Base.extend({
    ...
});

然后我们为视图模型扩展:

ExampleViewModel = BaseViewModel.extend({
    text: ko.observable("")
});

但似乎有问题。当你创建2个以上的视图模型实例时(比如你是将它们推入observableArray并使用模板来构建UI),似乎对绑定字段所做的任何更改都会更新所有视图模型而不仅仅是它必然会。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

因为扩展实际上没有实例化新的observable,所以它只是复制引用。

我认为你可以这样做:

ExampleViewModel = BaseViewModel.extend({
    constructor: function() {
        this.text = ko.observable("");
    }
});

虽然不如普通的Base2语法那么好,但只是由于属性问题而限制了Knockout的实现方式。