2014-02-11 43 views
0

我有一個具有導航屬性的父實體。如果集合中的任何子項被修改,則將子項的entityState設置爲已修改,但父項的entityState保持不變。微風:跟蹤實體家長是否有變化的孩子

我需要在屏幕上顯示一些可視指示,以顯示對父實體進行了一些修改,即使修改是在np集合中的子級上進行的。

我不能使用hasChangesChanged,因爲這太泛化了。只有在對父實體本身或np集合中的某個實體進行更改時,我才需要設置可視指示器。

有沒有一個簡單的方法來做到這一點,還是我必須手動觀察修改?

回答

1

顯然我沒有打我的另一個答案保存,但你想要做的要點是跟蹤對子實體的更改。您確實需要'手動'訂閱這些更改,因爲我沒有知道任何開箱即可觀看整個對象圖。 (記住,可能是巨大的,有不良影響)

,我曾經使用(僞代碼,採用淘汰賽,但應該足夠了)最好的選擇 -

初始化父與附加映射的屬性 -

 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 
        }); 
       }); 
      }); 
     } 

有一點需要記住的是,您要跟蹤訂閱,並確保在處理父對象時處理它。

+0

謝謝。好,我知道了。但是,你最後一句話是什麼意思?我爲什麼要處置它,我該怎麼做? – Sam

+1

如果您不處理訂閱,他們將繼續觀看這些實體,即使您可能不在該屏幕上或查看任何內容。這對你的應用程序可能沒有問題,但是如果它沒有使用var token = child.entityAspect.propertyChanged.subscribe();然後當你準備處理該訂閱時調用token.dispose(); –

+0

很有意義,非常感謝! – Sam