Tôi đang sử dụng Knockout để triển khai công cụ chọn danh sách khóa học. Tôi đang sử dụng cách tiếp cận dưới đây để điền dữ liệu (MVC3/Razor), để khi viewmodel ban đầu được điền, tôi không có vấn đề gì với mỗi mảng KO (ví dụ: CourseList, ScheduleList). Tuy nhiên, khi tải ban đầu từ máy chủ trả về 0 hàng, nghĩa là thuộc tính viewmodel 'ScheduleList' trống, thì không thể gọi bất kỳ phương thức nào như .push() hoặc .removeAll(). Có lẽ điều này có nghĩa là mảng quan sát không bao giờ được tạo ra vì không có gì để lấp đầy nó. Khi mô hình được lấp đầy, thuộc tính ScheduleList được điền với một Danh sách. Cách tốt nhất để khởi tạo nó khi hành động MVC trả về nó là sản phẩm nào? Có một jsFiddle dường như giải quyết nó, nhưng khi tôi cố gắng sử dụng tùy chọn 'create', nó làm cho toàn bộ mô hình của tôi trống. Tôi không chắc cú pháp của tùy chọn 'create' là gì. Các jsFiddle là ở đây: http://jsfiddle.net/rniemeyer/WQGVC/Cách khởi tạo chế độ xem Knockout khi tải viewmodel ban đầu trống rỗng
// 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);
});
Khi tải trang ban đầu không cư ScheduleList, sau đó đoạn mã sau ném một lỗi. Nếu tải trang đầu tiên chứa dữ liệu, sau đó bạn có thể gọi .removeAll() và .push() vv
var oneA= 'abc';
// push not working
this.Data.ScheduleList.push(oneA);
Cảm ơn! Đây chính xác là những gì đang xảy ra và điều này giải quyết vấn đề. Thú vị là hầu hết các jsFiddles tôi đã xem xét đã hành động trên tài sản (mảng chính nó), vì vậy tôi đã không cố gắng tạo ra gọi lại này. Cách tiếp cận khác do Ray đề xuất là tốt. –