2013-01-07 5 views
0

넉 아웃 기반 페이지를 기본 템플릿으로 변환 할 계획입니다. 그러나 jQuery 템플릿과 비교하여 기본 템플릿의 한계에 대해 몇 가지 질문이 있습니다.넉 아웃 기본 템플릿

넉 아웃 기본 템플릿을 사용하면 'if'컨트롤 내에서 함수를 참조 할 수 있습니까?

jQuery를 템플릿 :

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

는 "JQuery와 팀은 베타 과거이 플러그인을하지 않기로 결정했다. 그것은 더 이상 적극적으로 개발하거나 유지되고있다"알 수 없다. –

+0

정확히 내가 왜 네이티브 템플릿으로 페이지를 옮길 것입니까 – FloatLeft

답변

3

먼저 하나

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

기본 템플릿 내가이 사용하는 기본 템플릿처럼 인덱서에 액세스 할 수 있습니다, 또한

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

(이 가능하다) 예, 가능합니다. 많은 코드를 변경할 필요가 없습니다. 그러나, 어쨌든 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에 대한 자세한 내용을 볼 수 있습니다.

첫 번째 요점과 마찬가지로, 많은 논리를 템플릿에 제공하지 않도록 자바 스크립트 코드를 변경해야 할 수도 있습니다.

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

하는 주형 기본 KnockoutJS에서

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

더 나은 방법은

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

될 수 있으며, 당신은 당신의 배열에 대해 어쩌면 그냥 한 번, 당신의 js에서 로직을한다.

jQuery를 템플릿에 대한
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