KnockoutJS可观察数组 - 如何获得长度

时间:2014-05-18 20:56:03

标签: knockout.js knockout-mapping-plugin

我有一个具有可观察数组的KnockoutJS模型,我需要能够从JSON加载,还可以通过简单地将数据对象推送到数组来添加。我发现当我使用映射加载数据时,我无法再获得数组中项目的长度/数量,它总是等于零。我认为这是由于映射?

这是ghist:

var SalesPerson = function (data) {
    var self = this;
    if (data != null) {
        ko.mapping.fromJS(data, {Regions: regionMapping, Customers: customerMapping},     self); 
    } else {
        self.ID = ko.observable();
        self.FullName = ko.observable().extend({
            required: {
                message: '* Persons name needed'
            }
        });
        //self.Regions = ko.observableArray(); 
         self.Regions = ko.mapping.fromJS([]);
         self.Customers = ko.mapping.fromJS([]);
         //self.Customers = ko.observableArray(); // array of "Customers", who each     have many orders
    }

注意我最初使用例如self.Regions = ko.observableArray();放入数组,然后在看到related post

后更改为此self.Regions = ko.mapping.fromJS([]);

以下是整篇文章的小提琴:fiddle example

要测试小提琴,请单击“从内嵌模型加载”..区域和客户的“计数”应更新但不会更新,它将保持为零。

1 个答案:

答案 0 :(得分:5)

observable是一个函数,因此您必须在访问任何属性之前调用它。

所以它应该是text:Regions().length而不是text:Regions.length

此处已更新version