javascript - knockout中订阅的函数如何取消订阅?

标签 javascript knockout.js

我已经订阅了使用 ko 监听属性值变化的函​​数。

var self = this;
$( document ).ready( function () {

var postbox = new ko.subscribable();
var myViewModel =
{
    FirstName: ko.observable( "Bert" ),
    LastName: ko.observable( "pual" )
};
var sub = null;
for ( var i in myViewModel ) {
    var model = myViewModel[i];
    model.subscribe( self.notifyChange.bind( model, i ) );

}

$( '#unsubscribeButton' ).click( function () {
    // here i want to unsubscribe.
} );
 ko.applyBindings( myViewModel );
  });
 notifyChange = function ( PropName, newValue ) {
var self= this;
);
    }

这里我想一一取消订阅myViewModel属性的notifyChange,怎么办?

最佳答案

将调用订阅的结果存储在一个变量中(或者,在您的情况下,存储在一个数组中)。

当您想取消订阅时,只需对每个订阅调用 dispose 即可。

此处有完整描述 - http://knockoutjs.com/documentation/observables.html

您的代码将如下所示:

//store subscriptions in array
var subscriptions = [];

for ( var i in myViewModel ) {
    var model = myViewModel[i];
    subscriptions.push(model.subscribe( self.notifyChange.bind( model, i ) ));
}


//unsubscribe
for(var i in subscriptions) {
    subscriptions[i].dispose(); //no longer want notifications
}

关于javascript - knockout中订阅的函数如何取消订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10653030/

相关文章:

javascript - 为什么我的 .pagination li add active 对第 1 页不起作用?

javascript - 从当前绑定(bind)上下文中检索父属性名称/路径

indexing - knockout JS : Access index of item in array from within the JavaScript template

javascript - KO 网格显示问题,在调整网格大小时显示一行。还包括图像

php - 如何将 PHP 或 JavaScript 变量传递给 Windows cmd.exe

javascript - typescript 接口(interface) : Exactly one optional parameter is required

javascript - 如何清除nodeREPL中的所有变量?

knockout.js - 混合 knockout 和服务器端渲染

javascript - 如何根据用户选择更新我的税费

javascript - 向 HTML 标签添加自定义属性有多糟糕?