【发布时间】:2013-03-26 12:36:48
【问题描述】:
我有以下视图模型:
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);
};
};
此视图模型用于显示属于某个集合的卡片列表。我正在尝试允许用户通过以下方式编辑这些卡片的面(同时双面):
<!-- 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
这并不完全有效,因为编辑属性附加到 $root (Set) 对象,而不是 $parent (Card) 对象。我认为使这项工作的方法涉及“创建”方法,如下所示:Adding properties to the view model created by using the Knockout JS mapping plugin
将这些属性带到一方的父级需要什么语法?
编辑:到目前为止我有:
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()”是未定义的。现在深入研究,但如果有人有任何提示,我会全力以赴!
【问题讨论】:
标签: knockout.js