2012-08-09 28 views
0

使用Knockout JS時遇到了一個大問題。在我的視圖模型中,我有一個名爲Method的字段,它實際上是另一個視圖模型。Knockout JS模板使UI在編輯時「閃現」

該視圖模型可以是三種不同的東西之一(它映射到域模型中的多態對象)。爲了解決這個問題,我使用模板來檢查使用域模型選擇哪種類型的方法,然後顯示綁定該類型數據的模板。

,檢查方法的類型看功能,如:

this.getTemplate = function (data) { 
     var method = data.original.get_Method(); 
     if (method instanceof MyProj.MethodA) 
      return "methodA"; 
     else if (method instanceof MyProj.MethodB) 
      return "methodB"; 
     else if (method instanceof MyProj.MethodC) 
      return "methodC"; 
    } 

,我綁定模板樣子的標記:

<div data-bind="template: {name: getTemplate($data), data: $data.Method}"></div> 

這實際工作非常好,當我改變的類型通過UI中的下拉菜單,可以顯示域模型更新和正確的模板。然而,這是我的問題。每個模板都包含許多特定於每種方法類型的不同字段。每當我更改其中一個模板顯示的視圖模型中的某個值時,UI將閃爍,我認爲這是因爲模板再次被選中。這令人非常惱火,看起來非常糟糕。

關於如何解決這個問題的任何想法?任何幫助將不勝感激!

在此先感謝

/比約恩

回答

0

你有沒有使用任何可觀察到的是getTemplate函數內。更新該觀察值的值使模板重新渲染,並獲得閃光效果。

結算此link部分:「注意5:動態選擇使用哪個模板」。

+0

感謝您的回答。我意識到這一點,這不是問題。我剛剛解決了它:)這是代碼中的一個錯誤,它更新了域模型和視圖模型之間的映射,所以它與我提問的問題無關:/對不起! – Bearcosta 2012-08-09 13:01:45