2013-10-31 19 views
1

proihibited字符我打印出與淘汰賽JS網格行。我想我的觀點基於羯羊或不迭代的索引應用CSS類是整除2淘汰賽JS網格,在綁定聲明

這是我的約束力的聲明,呼籲各行:

<data-bind="css: { $index % 2 === 0 ? 'grid_row' : 'grid_a_row' }"> 

兩個問題出現了:

  • 採用%似乎屬性 聲明內被禁止。我的IDE(VS2012)不承認任何事情%之後來到 作爲字符串的一部分(我可以 看到,差別顏色)
  • 這是應用一個類的正確方式或其他在
    淘汰賽?或者我必須寫$index % 2 === 0兩次(每個班級一次)?

哪些解決方案適用?

回答

3

你的語法有點不對。你必須使用$index() % 2 === 0和你使用的是css binding不正確。這將工作:

<div data-bind="css: { grid_row: $index() % 2 === 0, grid_a_row: $index() %2 === 1 }"> 

http://jsfiddle.net/PYsc2/

+0

+1這就是它。剛剛擊敗我給它 – naveen

+0

這個解決方案很簡單,靠近我的原意。感謝您的澄清! – Saturnix

1

是的,你是正確的:

這是申請一個類或其他在 淘汰賽的正確方法?或者我必須兩次寫$ index == 2 === 0(每個班有一個)?

你的CSS結合語法不正確,應該是:

css: { 'name-of-css-rule': function(){}, 'another-css-rule': function(){} } 

在你的情況,你可以使一個觀察到的一樣:

viewModel.myBooleanFunction = ko.computed(function() { 
    return this.foo() % 0 === 0 ? "even" : "odd"; 
}, viewModel); 

,並在你的CSS結合其聲明像這個:

data-bind="css: myBooleanFunction" 

那些是動態CSS規則: 來自:http://knockoutjs.com/documentation/css-binding.html

+0

謝謝!非常有用!你是否也碰巧知道如何將迭代的索引傳遞給函數? – Saturnix

+1

使用簡單的函數,而不是一個計算和傳球$指數()把它的解決。 – Saturnix

1

或者,如果你喜歡使用attr binding,你可以使用聚結運營商這樣的。

data-bind="attr: { class: ($index() % 2 == 0) ? 'grid_row' : 'grid_a_row' }" 

請注意,它將完全覆蓋類屬性,並且任何其他先前聲明的類都將丟失。

+1

+1我也在考慮這一點,作爲替代解決方案。當使用它時,你必須小心你沒有任何額外的元素類,因爲我相信屬性綁定會覆蓋它們(這就是爲什麼我寧願使用css綁定來防止錯誤)。除此之外,效果很好。 –

+0

@dhsto:我會記住這一點。仍然是knockoutjs的新手。越來越驚訝,因爲每一天過去。我測試過。你是對的。它會覆蓋該屬性 – naveen