ko.observableArray支持关联数组

Ran*_*ens 13 knockout.js

是否有更好的(内置?)方式来混合observableArray和关联数组?

viewModel = {
    a: ko.observableArray(),
    a_assoc: {},
    add_item: function(i) {
        if (typeof this.a_assoc[i] == 'undefined') {
            this.a.push(i);
            this.a_assoc[i]=1;
        }
    }
}

viewModel.add_item('bla');
Run Code Online (Sandbox Code Playgroud)

RP *_*yer 8

通常,你会在Knockout中做这样的事情:

var viewModel = {
    a: ko.observableArray(["a","b","c","d"]),
    add_item: function() {
       this.a.push("new" + this.a().length);   
    }
};

viewModel.a_assoc = ko.dependentObservable(function() {
    var result = {};
    ko.utils.arrayForEach(this.a(), function(item) {
       result[item] = 1;
    });
    return result;
}, viewModel);
Run Code Online (Sandbox Code Playgroud)

因此,您有一个dependentObservable将您的数组映射到一个对象.请注意,每次更新原始数组时,都会重建该对象.因此,它的效率低于您帖子中的方法,但除非您的对象非常大,否则会导致性能问题.

此处示例:http://jsfiddle.net/rniemeyer/PgceN/

  • 目前没有utils的文档.目前最好的资源来自我的博客:http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html (2认同)