Arrays 访问';已更改';自定义绑定中可观察数组的信息:更新

Arrays 访问';已更改';自定义绑定中可观察数组的信息:更新,arrays,knockout.js,Arrays,Knockout.js,我知道,当您直接订阅一个可观察数组时,您可以从返回给您的参数中检索“已更改”的信息 我正在编写一个基于可观察数组的自定义绑定,并希望在:update回调中看到相同的更改信息 我好像没空。有办法得到它吗 我想我可以订阅:init中的可观察数组并定义我自己的更新回调,但这感觉不对 多谢…绑定更新是在可观察事件发生后触发的,相当于订阅更改事件,因此在当前的淘汰框架中,您想要的东西本机是不可能的 为了在更改之前访问值,您需要订阅可观察对象的beforeChange事件 您仍然可以在更新处理程序中轻松地完

我知道,当您直接订阅一个可观察数组时,您可以从返回给您的参数中检索“已更改”的信息

我正在编写一个基于可观察数组的自定义绑定,并希望在:update回调中看到相同的更改信息

我好像没空。有办法得到它吗

我想我可以订阅:init中的可观察数组并定义我自己的更新回调,但这感觉不对


多谢…

绑定更新是在可观察事件发生后触发的,相当于订阅更改事件,因此在当前的淘汰框架中,您想要的东西本机是不可能的

为了在更改之前访问值,您需要订阅可观察对象的beforeChange事件

您仍然可以在更新处理程序中轻松地完成这项工作

init: function( element, valueAccessor, allBindings, viewModel, bindingContext ) {
    var observable = valueAccessor();

    // Attach a new observable to the existing observable for use in the use in the update handler
    observable.beforeValue = ko.observable();
    var subscription = observable.subscribe(function(oldValue) {
      observable.beforeValue(oldValue);
    }, null, 'beforeChange');

    ko.utils.domNodeDisposal.addDisposeCallback(function() { subscription.dispose(); } );
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext ) {
    var observable = valueAccessor();

    var beforeValue = observable.beforeValue();
    var currentValue = observable();

    // Do update stuff here
}