在自定义绑定中访问可观察数组的“已更改”信息:更新

时间:2014-07-26 19:15:10

标签: arrays knockout.js

我知道您可以检索“已更改的”字样。当您直接订阅可观察数组时,参数中的信息会传回给您。

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

我似乎无法使用。有办法搞定吗?

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

...谢谢

1 个答案:

答案 0 :(得分:0)

绑定更新是在observable之后触发的,相当于订阅change事件,所以你想要的东西在当前的淘汰框架中是不可能的

为了在更改之前访问值,您需要订阅可观察的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
}