Javascript 更新元素时的knockoutjs动画转换
如果要从observableArray中添加或删除元素,则使用knockoutjs的模板上的动画转换效果非常好。但是我如何捕捉更新呢 目前,为了更新一个项目,我只是简单地替换数组中的一个项目,如下所示:Javascript 更新元素时的knockoutjs动画转换,javascript,knockout.js,Javascript,Knockout.js,如果要从observableArray中添加或删除元素,则使用knockoutjs的模板上的动画转换效果非常好。但是我如何捕捉更新呢 目前,为了更新一个项目,我只是简单地替换数组中的一个项目,如下所示: var index = arrayFirstIndexOf(self.documents(), function (item) { return item.id === doc.Id }); self.documents.replace(self.documents()[index], new
var index = arrayFirstIndexOf(self.documents(), function (item) { return item.id === doc.Id });
self.documents.replace(self.documents()[index], new Document(doc.Id, doc.Title, doc.Content))
动画过渡将此视为删除和插入。如何区分更新
干杯,这里是一个使用自定义绑定的解决方案 而不是使用替换:
var index = arrayFirstIndexOf(self.documents(), function (item) { return item.id === doc.Id });
self.documents()[index].title(doc.Title).content(doc.Content);
这对于简单对象很有效。但是一个更大的对象可能更好地使用映射插件。关键是,我不再替换数组项,因此不会触发“addAfter”和“beforeRemove”模板转换
标题和内容属性是可观察的对象。因此,为了处理数组项更新的转换,我使用如下自定义绑定:
ko.bindingHandlers.highlightChange = {
origValue : null,
init: function (element, valueAccessor) {
origValue = valueAccessor();
},
update: function (element, valueAccessor) {
if (origValue !== valueAccessor())
{
$(element).hide().fadeIn("slow");
}
}
};
然后将原始值与更新后的值进行比较。
如果有人有更好的解决方案,我会非常感谢你把它贴在这里
干杯。我想这取决于你如何进行动画过渡。一些额外的代码在这里会很有帮助。我确实有一个使用自定义绑定的很好的解决方案,但我要到明天才能回答我自己的问题。