2013-01-07 113 views
0

我打算淘汰賽基於頁面轉換爲本地模板。然而,與jQuery模板相比,我有幾個有關原生模板的侷限性的問題。淘汰賽本地模板

隨着敲除天然模板我可以引用「如果」控制中的功能?

jQuery的模板:

{{if GetFirstWord(ProductName) == "Premier"}} 

天然模板(這是可能的)

<!-- ko if: GetFirstWord(ProductName) == "Premier" --> 

另外,我可以訪問一個索引像這樣使用本機模板:

{{each(i, d) Benefits}} 
    <div class="{{if i%2==0}}even{{else}}odd{{/if}}"> 
{{/each}} 
+0

關於jQuery模板,請注意,「jQuery團隊決定不將此插件過去測試版,它不再被積極開發或維護」。 –

+0

究竟爲什麼我移動到頁面模板本土嗨 – FloatLeft

回答

3

首先一個:是的,這是可能的,而且很可能您不需要更改很多代碼。但是,您可能想以適應在KnockoutJS一個更好的架構反正做。它不僅僅是爲了KO,而且是一個更好的設計模式,更容易維護。

例如,這

<!-- ko if: GetFirstWord(ProductName) == "Premier" --> 

<!-- ko if: currentWordisPremier --> 

相同的功能,並在你的代碼中有類似

self.currentWord = ko.observable(""); 
self.currentWordisPremier = ko.observable(false); 
self.currentWord.subscribe(function(newCurrentWord){ 
    if(newCurrentWord === "Premier") self.currentWordisPremier(true); 
}); 

(這是一個簡單的例子,您可以通過動態模板以更具擴展性的方式設計您的代碼)

第二個:是的,但只是從2.1版本通過$index關鍵字。你可以閱讀更多關於討論here和一些文件here

與第一點,你可能要改變你的一些JavaScript代碼來不給模板太多的邏輯。

{{each(i, d) Benefits}} 
    <div class="{{if i%2==0}}even{{else}}odd{{/if}}"> 
{{/each}} 

在本地KnockoutJS模板化

<!-- ko foreach:Benefits --> 
    <!-- ko if: $index %2 == 0 --> 
    <div class="even"> ... </div> 
    <!-- /ko --> 
    <!-- ko ifnot: $index % 2 == 0 --> 
    <div class="odd"> ... </div> 
    <!-- /ko --> 
<!-- /ko --> 

一個更好的辦法可能是

<!-- ko foreach:Benefits --> 
    <div data-binding="css: {"even" isEven, "odd": isOdd}"> ... </div> 
<!-- /ko --> 

和您的陣列做的邏輯在你的JS,也許只是一次。

var index = 0; 
    var updatedBenefits = ko.utils.arrayForEach(self.Benefits(), function(benefit) { 
    var property = index++ %2 == 0 ? "isEven" : "isOdd"; 
    return benefit[property] = true; 
    }); 
    self.Benefits(updatedBenefits) 
+0

jjperezaguinaga,感謝您詳細的和有益的響應。 – FloatLeft