首先一個:是的,這是可能的,而且很可能您不需要更改很多代碼。但是,您可能想以適應在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)
關於jQuery模板,請注意,「jQuery團隊決定不將此插件過去測試版,它不再被積極開發或維護」。 –
究竟爲什麼我移動到頁面模板本土嗨 – FloatLeft