2013-04-15 82 views
0

在我的淘汰賽形式的諮詢/版,我有很多的代碼重複這樣的:模板通用表單域

<div data-bind="if:Id == 0"> 
My form field : <input type="text" name="MyFormField" data-bind="value:MyFormField /> 
</div> 
<div data-bind="if:Id != 0"> 
My form field consultable : <span data-bind="text:MyFormField"></span> 
</div> 

正如你可以看到,如果ID = 0,I顯示輸入,或只是爲了諮詢而簡單跨度。

是否有可能爲此製作一個通用模板? 的想法是:

  1. 用電話向我要顯示
  2. 如果標識== 0,模板渲染的輸入屬性的引用模板,相反,模板呈現跨度

感謝提前!

回答

2

查看documentation的註釋5,您可以動態選擇要用於某個部分的模板。對你來說,這將是這樣的:

<ul data-bind='template: { name: templateName }'> </ul> 

然後,計算出的屬性添加到您的視圖模型:

templateName = ko.computed(function() 
{ 
    return Id() === 0 ? 'inputTemplate' : 'spanTemplate'; 
}); 

,然後讓兩個模板命名一樣,在這兩個命名選項計算:

<script type="text/html" id="inputTemplate"> 
    <input type="text" data-bind="text: name" /> 
</script> 

<script type="text/html" id="spanTemplate"> 
    <span data-bind="text: name" /> 
</script> 
+0

我想象第二個模板id(對於span)是spanTemplate而不是Template。除此之外,它的作品。 謝謝! – eka808

+1

是的,好點,那是錯誤。很高興我能幫上忙。 –