Javascript 更新元素时的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

如果要从observableArray中添加或删除元素,则使用knockoutjs的模板上的动画转换效果非常好。但是我如何捕捉更新呢

目前,为了更新一个项目,我只是简单地替换数组中的一个项目,如下所示:

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");
           }
       }
   };
然后将原始值与更新后的值进行比较。 如果有人有更好的解决方案,我会非常感谢你把它贴在这里


干杯。

我想这取决于你如何进行动画过渡。一些额外的代码在这里会很有帮助。我确实有一个使用自定义绑定的很好的解决方案,但我要到明天才能回答我自己的问题。