使用ko.mapping.fromJS创建observableArray,给出“传递的参数必须是数组,null或未定义”

时间:2014-10-16 11:55:43

标签: knockout.js asp.net-web-api

我有以下viewModel(当然减少了):

function viewModel(calendarData) {
            var self = this;

            if (calendarData != null) {              
                self.Calendars = ko.observableArray(ko.mapping.fromJS(calendarData));                
            } else {                
                self.Calendars = ko.observableArray();
            }
}

这是我的json从我的网页api返回:

[{"Id":17,"Name":"try now","Events":[],"UserId":null},
 {"Id":19,"Name":"go","Events":[],"UserId":null}]

但是我得到了:

  

错误:

     

初始化可观察数组时传递的参数必须是数组,或null或未定义。

我是淘汰赛的新手,所以我会非常感谢我在这里做错了什么。

1 个答案:

答案 0 :(得分:3)

ko.mapping.fromJS函数使对象成为可观察对象。所以ko.mapping.fromJS返回函数。但是你应该将一个数组传递给ko.observableArray 所以你应该使用:

if (calendarData != null) {              
    self.Calendars = ko.observableArray(calendarData); // <-------                
} else {                
    self.Calendars = ko.observableArray();
}  

或者

if (calendarData != null) {              
    self.Calendars = ko.mapping.fromJS(calendarData); // <-------                
} else {                
    self.Calendars = ko.observableArray();
}