knockout将对象数组映射到可观察数组并创建计算属性foreach对象

时间:2014-01-30 18:18:37

标签: knockout.js

我想以下列方式将json数组数据映射到observablearray:

var modell = function() {


    self.activities = ko.observableArray();
    ...


    ko.mapping.fromJS(dataJson, {}, self.activities);
    // as a result I can use self.activities[0].FirstName or other properties
}

每个活动都是复杂的对象。 为简单起见,我们可以假设每个活动中有两个属性 - FirstNameLastName。这很好用,但可以写 映射选项将为每个活动创建计算的可观察FullName

所以,我需要引用像self.activities [0] .FirstName,以及self.activities [0] .FullName,其中FirstName是简单的可观察,但FullName是计算的。

修改 这是JSFiddle在http://jsfiddle.net/5ScWn/&& http://jsfiddle.net/8PK6F/,但它仍无效。

1 个答案:

答案 0 :(得分:2)

是的,可以使用映射选项为可观察数组中的每个项创建计算的observable。请尝试以下方法:

        var mappingOptions = {
            'activities': {
                create: function (options) {
                    return (new (function () {
                        this.fullName = ko.computed(function () {
                            return this.firstName() + ' ' + this.lastName;
                        }, this);

                        ko.mapping.fromJS(options.data, {}, this); // continue the std mapping
                    })());
                }
            }
        };

然后通过ko.mapping.fromJS(dataJson, mappingOptions, self.activities);

使用它