抛出undefined的ObservableArray不是Knockoutjs中的函数

时间:2014-07-23 23:47:48

标签: javascript jquery knockout.js

我遇到以下代码崩溃的问题

self.DivisionRuleList.push(div);

我收到以下错误:

Uncaught TypeError: undefined is not a function

列表应该被初始化,因为我在另一个下拉列表中使用相同的列表,即渲染,如果我在控制台中查找它,我可以看到值。

返回的对象正在按原样添加到数组Divisions。

我的代码:

Division = function() {
    this.id = ko.observable();
    this.name = ko.observable();
    this.sex = ko.observable();
    this.businessTypeId = ko.observable();
};

function ViewModel() {
    var self = this;
    self.Division = ko.observable(new Division);
    self.Divisions = ko.observableArray();
    self.DivisionRuleList = ko.observableArray();

    self.submitDivision = function(element) {
        var json = ko.mapping.toJSON(self.Division);
        $.post("@Url.Action("AddDivision", "BusinessRules")", {
            json: json
        }).done(function (d) {

            var div = ko.mapping.fromJSON(d);
            self.Divisions.push(div);
            self.DivisionRuleList.push(div);

            self.Division(new Division());   
         })
         .fail(function (d) {
              alert("FAILED");         
         });
    };
}

内容在div(json)

中重新演绎
{  
    "Id":1042,
    "Sex":0,
    "SexString":"Herrar",
    "Name":"test",
    "BusinessTypeString":"Typ1",
    "DivisionFullname":"Typ1 Herrar test",
    "UserId":2,
    "Username":"Testanvändare",
    "Timestamp":"2014-07-24T13:40:19.733328+02:00",
    "TimestampString":"2014-07-24 13:40",
    "BusinessTypeId":1,
    "BusinessType":null
}

更新

我在同一视图中使用以下选项列表中的DivisonRuleList:'

<select class="form-control" data-bind="options: ViewModel.DivisionRuleList(),
    optionsValue: 'Id',
    optionsText: function (item) {
        return item.BusinessType.Name() + ' ' + item.SexString() + ' ' + item.Name();
   },
   value: ViewModel.BusinessRule().divisionId">
</select>

如果我删除它,它工作正常。或许是一条线索?

ViewModel初始化

$(document).ready(function() {
    var req = $.ajax("@Url.Action("GetDivisionsNoRule", "BusinessRules")", { cache: false });                
    ViewModel = new ViewModel();

    req.done(function(data) {
         ViewModel.DivisionRuleList = ko.mapping.fromJSON(data);
         ko.applyBindings(ViewModel);            
    });
});

1 个答案:

答案 0 :(得分:1)

是否定义了BusinessType.Name?猜测BusinessType为null,它包含在ko.observable中,该ko.observable具有未定义的Name属性。