Knockout.js、require.js などを使用して MVVM Web アプリに取り組んでいます。問題は、ビューモデルのプロパティ (オブザーバブル配列の型) 内のアイテムにアクセスできないことです。
サンプル契約モデル:
define('model.contract', ['ko'],
function (ko) {
var Contract = function () {
var self = this;
self.id = ko.observable();
self.subject = ko.observable().extend({ required: true });
self.shoppingItems = ko.observableArray();
};
return Contract;
});
サンプル ビュー モデル:
define('vm.contract', ['ko'],
function (ko) {
var contract = ko.observable(), // Is initialised as viewmodel activates
deleteCmd = function () {
var selectedId = getSelectedId(),
deletedId = contract.shoppingItems.remove(function (item) { return item.id === selectedId; });
alert('Item ' + deletedId[0].id + ' was deleted!');
};
return {
contract: contract,
deleteCmd: deleteCmd
};
});
サンプル ビュー:
<div data-bind="template: {name: shoppingItemTemplate, foreach: contract().shoppingItems}"></div>
<button data-bind="click: deleteCmd">Delete Selected</button>
ビューモデルでアクセスする必要があるのはcontract.shoppingItems
すべて未定義です。