我正在使用Knockout實現課程列表選擇工具。我正在使用下面的方法來填充數據(MVC3/Razor),這樣當視圖模型最初被填充時,我對每個KO數組(即CourseList,ScheduleList)都沒有問題。但是,當來自服務器的初始負載返回零行時,意味着視圖模型'ScheduleList'屬性爲空,則無法調用任何方法,如.push()或.removeAll()。據推測,這意味着可觀察陣列從未被創建,因爲沒有什麼可以填充它。填充模型時,ScheduleList屬性將填充List。當MVC操作將其返回爲空時,實例化它的最佳方式是什麼?有一個似乎解決它的jsFiddle,但是當我嘗試使用「創建」選項時,它會將我的整個模型呈現爲空白。我不確定'創建'選項的語法是什麼。該的jsfiddle是在這裏:http://jsfiddle.net/rniemeyer/WQGVC/初始視圖模型加載爲空時如何初始化Knockout視圖模型
// Get the data from the server
var DataFromServer = @Html.Raw(Json.Encode(Model));
// Data property in viewmodel
var data = {
"CourseList": DataFromServer.CourseList ,
"ScheduleList": DataFromServer.ScheduleList
};
$(function() {
// Populate Data property
viewModel.Data = ko.mapping.fromJS(data);
// ko.applyBindings(viewModel, mappingOptions);
ko.applyBindings(viewModel);
});
當初始頁面加載不填充ScheduleList,然後將下面的代碼拋出一個錯誤。如果初始頁面加載包含的數據,那麼你可以調用.removeAll()和.push()等
var oneA= 'abc';
// push not working
this.Data.ScheduleList.push(oneA);
謝謝!這正是發生的情況,並解決了這個問題。有趣的是,我看到的大多數jsFiddles都是在屬性(數組本身)上進行操作,所以我沒有嘗試過創建回調。 Ray建議的另一種方法也適用。 –