无法访问knockout.js mvvm中的viewmodel来操纵项目
问题描述:
我正在使用Knockout.js,require.js等MVVM web应用程序。问题是我无法访问属性(类型observable数组)在我的viewmodel。无法访问knockout.js mvvm中的viewmodel来操纵项目
合同样本模型:
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
和我得到的是未定义。
答
为什么你定义你的contract
为observableArray
而不是仅仅是observable
?
也不要忘了,你应该叫contract()
得到的contract
观察到的值:
// ...
deletedId = contract().shoppingItems.remove(function (item) { return item.id === selectedId; });
// ...
更新: 只注意到你正确定义model.contract
。请将您的return Contract
Contract
定义块之外:)
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;
}
);
对不起这是一个错误。我纠正了它。你对'contract()'是正确的,但问题依然存在。 – Pejman 2013-03-16 10:29:26
查看更新的答案。 – 2013-03-16 10:37:13
嗯,这很尴尬,但这个问题只存在于我的原代码中。我也在这里纠正。其实我的模型工作正常,这就是为什么我的'shoppingItems'列表的绑定工作。 – Pejman 2013-03-16 10:44:34