これは動作するコードですが、knockoutjs マッピング プラグインを使用すると改善される可能性があります。
エンティティ (e) に 5 つのドメイン プロパティがあり、エンティティ プロパティをオブザーバブルに変換するビューモデルでラップしたいと考えています。次に、isSelected プロパティである各ビューモデルに別の 6 番目のプロパティを追加します。これらすべては、マッピング プラグインを使用して行います。
function activate(){
var schoolyearModels = dataservice.getSchoolyears();
var schoolyearViewModels = [];
for (var i = 0; i < schoolyearModels.length; i++){
var e = schoolyearModels[i];
var schoolyearViewModel = new SchoolyearViewModel(e.schoolyearId,
e.schoolyearName, e.from, e.to,
e.lastEdited, self.Selected);
schoolyearViewModels.push(schoolyearViewModel);
}
return schoolyears(schoolyearViewModels);
}
ビューモデルを作成します。
function SchoolyearViewModel(id, schoolyearName, from, to, lastEdited, selected){
var me = this;
me.schoolyearId = id;
me.schoolyearName = ko.observable(schoolyearName);
me.from = ko.observable(from);
me.to = ko.observable(to);
me.lastEdited = ko.observable(lastEdited);
me.isSelected = ko.computed(function (){
return selected() === me;
});
}
サーバーからのデータは JSON です。
マッピングプラグインから取得したビューモデルが意味をなさない/必要なプロパティが含まれていないため、私が試したことは早い段階で失敗しました...
偽の JSON サーバー データ:
var s1 = { schoolyearId: 1, schoolyearName: 'Schoolyear 1',
from: new Date(), to: new Date(), lastEdited: new Date() };
var s2 = { schoolyearId: 2, schoolyearName: 'Schoolyear 2',
from: new Date(), to: new Date(), lastEdited: new Date() };
var s3 = { schoolyearId: 3, schoolyearName: 'Schoolyear 3',
from: new Date(), to: new Date(), lastEdited: new Date() };
var s4 = { schoolyearId: 4, schoolyearName: 'Schoolyear 4',
from: new Date(), to: new Date(), lastEdited: new Date() };
var s5 = { schoolyearId: 5, schoolyearName: 'Schoolyear 5',
from: new Date(), to: new Date(), lastEdited: new Date() };
var s6 = { schoolyearId: 6, schoolyearName: 'Schoolyear 6',
from: new Date(), to: new Date(), lastEdited: new Date() };
var s7 = { schoolyearId: 7, schoolyearName: 'Schoolyear 7',
from: new Date(), to: new Date(), lastEdited: new Date() };
var s8 = { schoolyearId: 8, schoolyearName: 'Schoolyear 8',
from: new Date(), to: new Date(), lastEdited: new Date() };
var s9 = { schoolyearId: 9, schoolyearName: 'Schoolyear 9',
from: new Date(), to: new Date(), lastEdited: new Date() };
var schoolyears = [s1, s2, s3, s4, s5, s6, s7, s8, s9];
var jsondata = JSON.stringify(schoolyears );
var viewModelData = ko.mapping.fromJSON(jsondata);
今viewModelDataを見ると、5つの観測可能なプロパティがあると思っていましたが、そこにはありませんか?
JSON データを正しくマッピングするにはどうすればよいですか?