我有以下视图模型:
var ViewModel = function(setData, dummyCard) {
var self = this;
ko.mapping.fromJS(setData, {}, self);
self.cardCount = ko.computed(function() {
//debugger;
return self.cards().length;
});
self.editing = ko.observable(false);
self.edit = function () {
debugger;
self.editing(true);
};
};
此 viewModel 用于显示属于 Set 的卡片列表。我试图允许用户通过以下方式编辑这些卡片的面(同时双面):
<!-- ko foreach: cards -->
<!-- ko foreach: sides -->
<div data-bind="visible: !$root.editing()" class="span5 side-study-box">
<p data-bind="text: content">SIDE 1</p>
</div>
<!-- /ko -->
<!-- /ko -->
我在这里的示例中添加了编辑功能(参见 Bert Bertington 的 hasFocus 示例):http ://knockoutjs.com/documentation/hasfocus-binding.html
这并不完全有效,因为 Edit 属性附加到 $root (Set) 对象,而不是 $parent (Card) 对象。我认为完成这项工作的方法涉及“创建”方法,如下所示:向使用 Knockout JS 映射插件创建的视图模型添加属性
将这些属性带到一方的父级需要什么语法?
编辑:到目前为止,我有:
var ViewModel = function(setData, dummyCard) {
var self = this;
var cardModel = function(data) {
debugger;
ko.mapping.fromJS(data, {}, this);
this.editing = ko.observable(false);
this.editing = function() {
debugger;
this.editing(true);
};
};
var mapping = {
'cards': {
create: function(options) {
return new cardModel(options.data);
}
}
};
self.cardCount = ko.computed(function() {
//debugger;
return self.cards().length;
});
不过,它并不能完全与 js 的其余部分一起使用 - 现在“cards()”是未定义的。现在深入研究它,但如果有人有任何提示,我会全神贯注!