我认为标题极具误导性,但问题很简单。
好吧,让我将它放在透 View -fiddler中。
我有三种模型:BoardViewModel,List,Card
好吧,总的来说,list
模型创建了一个名为cards
的数组。self.cards = ko.observableArray(cards);
(第79行)
淘汰赛又将myObservableArray.remove()
公开为ko.observableArray()
的一部分。
反过来,这让我可以抛弃达到其目的的卡片self.cards.remove(card);
(第99行)
问:我可以通过card
模型调用remove()吗?
还是我需要在列表模型中定义另一个函数并传递card
对象,以便能够进行与第99行相同的调用?self.archive = function (card)
(第68行)
提示:单击编辑链接/按钮以找到“存档”按钮
最佳答案
在createCard
对象上扩展List
方法,以处理该Card
中所有List
对象的创建:
self.createCard = function (id, title, description, contentItemId) {
if (id) {
self.cards.push(new Card(id, title, description, contentItemId, self.cards));
} else {
var title = $('#textTitle').val().trim();
if (title.length > 0) {
var newCard = new Card(-1, title, "", -1, self.cards);
self.cards.push(newCard);
// clear data
$('#textTitle').val('');
}
}
}
注意,它将对包含
observableArray
的Card
的引用推入Card
对象。然后,card对象可以保留并使用它:var Card = function(id, title, description, contentItemId, list) {
var self = this;
this.containingArray = ko.observable(list);
/*...*/
self.archive = function (card) {
self.containingArray.remove(self);
};
}
但是,当父
List
从一个列表拖到另一列表时,您需要更新此属性。您可以在绑定(bind)中添加另一个选项来执行此操作:<div class="cards" data-bind="sortable: { data: cards, afterMove: cardMoved }">
在
List
模型中具有相应的功能self.cardMoved = function(args) {
args.item.containingArray(args.targetParent);
}
关于knockout.js - 如何从子模型中调用父方法( knockout ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26973855/