breeze:跟踪实体父项是否具有更改的子项

breeze:跟踪实体父项是否具有更改的子项,breeze,Breeze,我有一个具有导航属性的父实体。如果集合中的任何子项被修改,则子项的entityState设置为modified,但父项的entityState保持不变 我需要在屏幕上显示一些对父实体的修改,即使修改是在np集合中的子实体上进行的 我不能使用haschanged,因为它太通用了。仅当父实体本身或np集合中的某个实体发生更改时,我才需要设置可视指示器 有没有一个简单的方法可以做到这一点,或者我必须手动观察修改 显然,我没有在我的另一个答案上点击save,但您尝试做的要点是跟踪子实体的更改。您确实需要

我有一个具有导航属性的父实体。如果集合中的任何子项被修改,则子项的entityState设置为modified,但父项的entityState保持不变

我需要在屏幕上显示一些对父实体的修改,即使修改是在np集合中的子实体上进行的

我不能使用haschanged,因为它太通用了。仅当父实体本身或np集合中的某个实体发生更改时,我才需要设置可视指示器


有没有一个简单的方法可以做到这一点,或者我必须手动观察修改

显然,我没有在我的另一个答案上点击save,但您尝试做的要点是跟踪子实体的更改。您确实需要“手动”订阅这些更改,因为我对查看整个对象图一无所知。(请记住,这可能会产生巨大的负面影响)

我以前使用过的最好的选项(伪代码,使用Knockout,但应该足够了)——

使用其他未映射属性初始化父级-

        metadataStore.registerEntityTypeCtor('Person', null, personInitializer);

        function personInitializer(person) {
            person.hasChanges = ko.computed(function() { 
                ko.utils.arrayForEach(person.children(), function (child) {
                    child.entityAspect.propertyChanged.subscribe(function () {
                        // Do your logic here
                    });
                });
            });
        }

需要记住的一点是,您希望跟踪订阅,并确保在处理父对象时处理订阅。

谢谢。好的,我知道了。但你最后一句话是什么意思?我为什么要处理它?我该如何处理?如果您不处理订阅,他们将继续监视这些实体,即使您可能不再在该屏幕上或查看。对于您的应用程序来说,这可能没什么问题,但如果不是,请使用var token=child.entityAspect.propertyChanged.subscribe()之类的内容;然后,当您准备处置该订阅调用令牌时;