2

我有一個控制器,返回對象的二維數組作爲json。透過我的javascript調用:Knockout.js,如何更改映射的二維數組的值?

​​

我也有以下的html:

<table> 
    <tbody data-bind="foreach: board">   
     <tr data-bind="foreach: $data"> 
      <td data-bind="attr: { class: Color }"></td> 
     </tr> 
    </tbody> 
</table> 

它產生與漂亮的彩色細胞一個不錯的二維HTML表格(基於對來自一個類顏色屬性)。我現在如何改變這種顏色到別的東西?

我想:board[1][1]({Color: 'red'});,但我得到一個錯誤,指出板[1]不存在...

而另一個問題,我怎麼可以添加多個類的約束力?我想:

... 
<td data-bind="attr: { class: Color + ' some-other-class' }"></td> 
... 

但後來我得到:

class="function b() {  if (0 < arguments.length) {   if (!b.equalityComparer || !b.equalityComparer(d, arguments[0])) {    b.H(), d = arguments[0], b.G();   }   return this;  }  r.T.Ha(b);  return d; } some-other-class" 

它是一個錯誤還是我做錯了什麼?

回答

3

映射插件會將您的數組轉換爲observableArray並將您的屬性變爲observables。

對於你的第一個情況下,你需要做解開了觀察到的數組:board.board()[1][1]

對於其他問題,顏色是可觀察到的。如果你在表達式中使用它,並且想要獲得它的值,那麼你需要做Color()。所以,它看起來像:

<td data-bind="attr: { class: Color() + ' some-other-class' }"></td> 
+0

謝謝,這幫了我很多。我是新來的淘汰賽,仍然犯這些愚蠢的錯誤......我仍然不明白爲什麼''td data-bind =「attr:{class:Color}」>'工作。你能解釋一下嗎? – 2012-02-26 10:51:38

+2

所有的綁定都會檢查它們是否通過了observable並嘗試解包它。但是,如果使用表達式('Color()+'某個其他類),則在進入綁定之前對其進行評估。 – 2012-02-26 17:57:40

相關問題