2013-04-16 59 views
2

在淘汰模板綁定過程中,我需要檢測何時處理每行中的第一個元素,因爲它不應該包含它的錨標記。使用敲除來確定foreach中的第一個元素

鑑於淘汰賽以下JS ...

function Model() { 
    var self = this; 
    self.gridData = ko.observableArray('{"GridData":[["Category foo","0","0"],["Category bar","0","0"]]}'); 
} 

var model = new Model(); 
ko.applyBindings(model); 

與此模板...

<script type="text/html" id="template"> 
    <table> 
     <tbody data-bind="foreach: gridData"> 
      <tr data-bind="foreach: $data"> 
       <td><a href="" data-bind="text: $data"></a></td> 
      </tr> 
     </tbody> 
    </table> 
</script> 

和這個網站...

<div data-bind="template: { name: 'template' }"></div> 

可以在「如果'綁定以某種方式使用,如果我們正在處理第一個元素,則運行正確?

此外,我發現這SO Post,但它並沒有得到我相當我所期待的。

UPDATE:

感謝兩個答案。使用每個提供的信息,我能夠找到一個適合我的情況的好辦法。我我的模板更新到下面...

<script type="text/html" id="template"> 
     <tbody data-bind="foreach: gridData"> 
      <tr data-bind="foreach: $data"> 
       <!-- ko if:($index()===0) --> 
       <td data-bind="text: $data"></td> 
       <!-- /ko --> 
       <!-- ko ifnot:($index()===0) --> 
       <td><a href="" data-bind="text: $data"></a></td> 
       <!-- /ko --> 
      </tr> 
     </tbody> 
</script> 

回答

5

您可以簡單地使用$index結合上下文,它是可觀察到的,所以你需要調用它來得到它的價值。

JS

var vm = { 
    items: ['a', 'b', 'c', 'd', 'e', 'f'] 
}; 

ko.applyBindings(vm); 

HTML

<div data-bind="foreach: items"> 
    <div data-bind="css: { first: $index() == 0 }"> 
     <span data-bind="text: $index"></span> 
     : 
     <span data-bind="text: $data"></span> 
    </div> 
</div> 

小提琴:http://jsfiddle.net/xixonia/v8Eh2/

的foreach文檔:http://knockoutjs.com/documentation/foreach-binding.html

綁定上下文文件:http://knockoutjs.com/documentation/binding-context.html

1

你有沒有試過類似的東西?

<script type="text/html" id="template"> 
     <table> 
      <tbody data-bind="foreach: gridData"> 
      <tr data-bind="foreach: $data"> 

       <td> 
        <span data-bind="text:$data,visible: ($index() === 0) " ></span> 

        <a href="" data-bind="text: $data ,visible: ($index() >=1)"></a> 
       </td> 
      </tr> 
      </tbody> 
     </table> 
    </script> 

訣竅是使用「$ index」。 我也建議你看看here,你可以找到很多有用的特殊屬性。

(另請注意,您需要使用淘汰賽2.X +)

[更新]對不起,克里斯托弗·哈里斯,我意識到他張貼了他的答案,而我回答,所有的權利,他當然

相關問題