从javascript对象更新基于Knockout的表单

时间:2014-04-11 13:19:08

标签: javascript knockout.js

是否可以仅使用Knockout查看/使用自定义类的其他对象? 我试图用不同的数据找到一种打开淘汰赛的方法,但总是采用相同的结构。

我做了什么:

// I have an Event class which looks like that:
function cEvent(id){
    this.id = id;
}
// I keep an array of instances of that class in something like:
var arr = [new cEvent(1), new cEvent(2)]

在html页面上我有:

Event ID: <span data-bind="text: id"></span>

我创建了一个类似访问器的类来使用Knockout

从特定事件中获取数据
   cEvent2 = function cEvent2(baseEvent) {
        this.id = ko.computed(function(){
            return baseEvent.id;
        });
    }

当我使用 ko.applyBindings(arr [0]); 时,它会起作用但如果我想加载另一个&#34;模型&#34;没有清理节点并在页面上重新应用淘汰赛?

我想要的是什么:

我想要像 ko.applyBindings(arr [1]); 那样根据我想要的数据更新界面。


当然,实际上cEvent类要复杂得多,但我试图看看我们是否能够在没有直接扩展cEvent实例的情况下完成某些事情。

也许我只是想做错事,这不是淘汰赛想要工作的方式吗?我知道在我的情况下,我希望淘汰赛能成为一名简单的班级读者。即使它可以做得更多。

任何提示都会非常感激。

1 个答案:

答案 0 :(得分:2)

这就是我要做的事情:

function cEvent(id){
    this.id = id;
}

function myViewModel() {
    var arr = [new cEvent(1), new cEvent(2)]

    this.selectedEvent = ko.observable(arr[0]);
}

ko.applyBindings(new myViewModel());

这样,如果你想绑定到selectedEvent.id,当你想要查看不同的事件时,你需要做的就是更新selectedEvent属性,所有的绑定都会自动更新。