2015-05-19 36 views
0

我有以下型號:angularjs:對視圖模型的中間表示並保持同步

{ 
    "RU": { 
     name: "value a", 
     other_key: "xxx", 
    }, 
    "EN": { 
     name: "value a", 
     other_key: "xxx", 
    }, 
    ... 10+ other languages ... 
} 

要渲染的形式我與中間格式去:

[ 
    { name: "value_a", languages: ["RU", "EN"] } 
    ... other groups by value ... 
] 

如何保持這一切都同步?原始模型可能會發生變化,我應該將它們推入中間格式以更新視圖。視圖中的更改可能由用戶進行,我應該將它們傳播到模型和中間視圖。

沒有大量的觀察者和複雜的代碼,想不到好的解決方案。 想法?

+0

使模型成爲一個真實的對象,使用執行更新的方法,以便它們可以更新不同的格式。此外,中間格式也可以留在模型中... – ianribas

+0

也許你必須要看,你需要同步,你需要知道改變,當它改變時你需要看或聽 – Nicol

回答

0

您只能觀看模型&的中間格式(做第三個參數設置爲真正的深度觀看完整手錶)。

var surpressWatchmodel = false; 
var surpressWatchinter = false; 

$scope.$watch('model',function(newval,oldval){ 
    if(surpressWatchmodel) { surpressWatchmodel = false; return; } 
     //update intermediate format. 
    surpressWatchinter = true; 
},true); 

$scope.$watch('intermediate',function(newval,oldval){ 
    if(surpressWatchinter) { surpressWatchinter = false; return; } 
     //update model format. 
    surpressWatchmodel= true; 
},true); 

對於您將使用ng-model =「intermediate.name」的視圖(angular會將此項添加爲您的監視項目)。

+0

你有沒有嘗試過可以在生產中被抑制的觀察者應用?恐怕模型觀察者的壓抑可以掩蓋外部的變化。 – ruz

+0

抑制需要防止圓形手錶。 – kwangsa

相關問題