使用Breeze.js取消订阅所有属性更改事件

Unsubscribe from all property change events with Breeze.js

本文关键字:属性 事件 Breeze js 取消 使用      更新时间:2023-09-26

按照文档来订阅单个实体的更改事件很容易-

    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事件。

我们能够重现这个问题,并且正在调查这个问题。