使用Breeze.js取消订阅所有属性更改事件
Unsubscribe from all property change events with Breeze.js
按照文档来订阅单个实体的更改事件很容易-
var token;
var myEntity = ko.observable();
if (token == null) {
token = myEntity().entityAspect.propertyChanged.subscribe(function (changeArgs) { trackChanges(changeArgs); });
}
但是如果我想订阅一个observableArray并跟踪令牌
var tokens = ko.observableArray();
var myEntitys = ko.observableArray();
if (tokens().length === 0) {
ko.utils.arrayForEach(myEntitys(), function (entity) {
var etoken = entity.entityAspect.propertyChanged.subscribe(function (changeArgs) { trackChanges(changeArgs); });
tokens.push(etoken);
});
}
console.log(tokens());
订阅工作正常,但每个令牌都等于相同的值
//This works fine
myEntity().entityAspect.propertyChanged.unsubscribe(token);
//**This does not work because myEntitys does not have an entityAspect, of course **
ko.utils.arrayForEach(tokens(), function (token) {
myEntitys().entityAspect.propertyChanged.unsubscribe(token);
});
//This works, but I am not sure why because token was set above to equal a single entity (myEntity())
ko.utils.arrayForEach(myEntitys(), function (entity) {
entity.entityAspect.propertyChanged.unsubscribe(token);
});
是否有一种方法可以在离开视图或正确的方法来做我上面尝试的事情时取消订阅一切?如果我再次加载相同的视图,它将被双重订阅propertyChange事件。
我们能够重现这个问题,并且正在调查这个问题。
相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- JavaScript-动态SVG-onload属性-未触发事件
- 手柄'img'单击事件并插入'alt'使用jQuery将属性转换为文本框
- JQuery:使用clone()生成的元素不采用原始的事件属性
- JS事件未更改输入禁用属性
- 从其他元素上的单击事件访问image src属性
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- 如何从jQuery的事件对象中检索属性
- 更改el属性时未激发主干视图事件
- SVG-全局属性和事件的列表
- jQuery:使用实时事件添加tabindex属性
- 选中javascript中的属性集时,复选框更改事件未触发
- 我想从使用onkeypress事件的文本区域获取一个属性
- 取消 iframe 中具有 target=“_parent” 属性的链接事件
- datalist获取选定的值和自定义属性(无事件)
- Google事件侦听器:未捕获类型错误:无法读取属性'addEventListener'为null
- 将属性添加到窗元素时是否引发事件
- 更改视图属性 事件聚合器 Aurelia
- 在'onmouseover'中修改HTML's CSS属性事件
- jQuery中的自定义属性事件