2

私はオブジェクトの2次元配列をjsonとして返すコントローラを持っています。それはから来ているクラスに基づいて、きれい色の細胞との素敵な2次元のHTMLテーブルを(生成Knockout.js、マップされた2次元配列の値を変更するにはどうすればよいですか?

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

​​

は、私はまた、次のHTMLを持っている:私は私のJavaScriptから電話をかけますカラープロパティ)。どうやってこの色を別の色に変えることができますか?

そして、別の質問には、どのように私はバインディングに複数のクラスを追加することができます... 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に変換し、プロパティをオブザーバブルに変換します。

あなたの最初のケースでは、あなたが実行して観測可能配列のラップを解除する必要があります:board.board()[1][1]

を他の質問については、色が観測可能です。式でそれを使用していて、その値を取得したい場合は、Color()を実行する必要があります。だから、それは次のようになります:

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

ありがとう、それは私を助けました。私はノックアウトに新しく、まだそれらのばかげた間違いをしています...なぜ 'が動作するのかまだ分かりません。あなたはそれを説明できますか? –

+2

バインディングはすべて、オブザーバブルを渡してアンラップしようとしているかどうかをチェックします。しかし、式( 'Color()+ 'some-other-class')を使うと、バインディングに入る前に評価されます。 –

関連する問題