Knockout订阅事件被解雇了两次

时间:2014-12-10 05:24:03

标签: javascript knockout.js

我正在使用KO可观察数组,我试图在自己的.subscribe方法中更改其可观察字段之一,这会导致两次触发相同的事件。 我怎么能避免这个? 代码

        $.each(self.PricingList(), function (i, pricing) {

        var previousValue = pricing.Currency().code();

        pricing.Currency().code.subscribe(function () {
            ShowConfirmation(null, 'Are you sure ?',
                function () {
                    // will be executed if user click on Yes
                },function () {
                     // Will be executed if user clicks No 
                    // How can i restore previous value ?
                   pricing.Currency().code(previousValue);
                   // the moment i change currency code's value its showing me confirmation dialog again, which i want to avoid.
                });
        });

2 个答案:

答案 0 :(得分:0)

 $.each(self.PricingList(), function (i, pricing) {    
        pricing.Currency().code.subscribe(function (previousValue) {
            ShowConfirmation(null, 'Are you sure ?',
                function () {

                },function () {
                   pricing.Currency().code(previousValue);// this line calls subscribe method again because the value in this observable changes, so try to remove this line from here.

                });
        }, null, "beforeChange");

来源:http://knockoutjs.com/documentation/observables.html

答案 1 :(得分:0)

这不是您问题的直接答案,但我相信如果我假设正确,它将解决潜在的问题:您正在尝试进行可选的可撤消更改。

如果你看一下这个blog post,它描述了一种方法,你可以在提供beginEditcancelEdit函数的观察者周围使用包装器(类似于扩展器),可以调用它们必需的。

this Github repo中提供了此源代码。