Knockout を使用してコース リスト選択ツールを実装しています。以下のアプローチを使用してデータ (MVC3/Razor) を設定しているため、ビューモデルが最初に設定されたときに、各 KO 配列 (つまり、CourseList、ScheduleList) で問題が発生することはありません。ただし、サーバーからの初期ロードでゼロ行が返された場合、つまりビューモデルの 'ScheduleList' プロパティが空であることを意味し、.push() や .removeAll() などのメソッドを呼び出すことはできません。おそらくこれは、オブザーバブル配列を埋めるものがなかったために作成されなかったことを意味します。モデルがいっぱいになると、ScheduleList プロパティに List が設定されます。MVC アクションが空として返すときにインスタンス化する最良の方法は何ですか? それに対処しているように見えるjsFiddleがありますが、「作成」オプションを使用しようとすると、モデル全体が空白になります。「作成」オプションの構文がわかりません。jsFiddle は次のとおりです。http://jsfiddle.net/rniemeyer/WQGVC/
// 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 );