【问题标题】:breeze: track if entity parent has children with changes微风:跟踪实体父级是否有更改的子级
【发布时间】:2014-02-12 00:25:29
【问题描述】:

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

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

我不能使用 hasChangesChanged,因为它太通用了。仅当对父实体本身或 np 集合中的实体之一进行更改时,我才需要设置视觉指示器。

有没有一种简单的方法可以做到这一点,还是我必须手动观察修改?

【问题讨论】:

    标签: breeze


    【解决方案1】:

    显然我没有在我的其他答案上点击保存,但您尝试做的事情的要点是跟踪对子实体的更改。您确实需要“手动”订阅这些更改,因为我不知道开箱即用的信息可以查看整个对象图。 (请记住,这可能是巨大的并产生不利影响)

    我之前用过的最好的选择(伪代码,使用 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();然后当您准备好处理该订阅调用 token.dispose();
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多