2016-05-09 5 views
0

私はASP MVCチェスのWebアプリケーションで作業しています。サーバ - クライアント部分はSignalRで作られています。サーバー部分はC#で作られ、ゲームが実装され、クライアント部分はKnockoutを使ってjavascriptになっています。ノックアウトの文字列の配列

チェスボードには64個のimgタグがあります。これらのイメージのソースパスは、クライアント部分の文字列リストに格納されます。 SignalRを使用して、その配列をクライアントに渡すことができます。

これらのimgタグには異なるCSSクラス(白黒)と異なるIDがあるため、データバインド= "foreach:pathArray"は使用できません。したがって、このようなパスにソースをバインドしようとしています。

data-bind="attr: { src: pathArray()[1]}" 

しかし、動作しません。

Chromeでデバッグすると、javascriptの配列にデータが格納されていることがわかりましたが、imgタグにアイテムをバインドすることはできません。

これを行う別の方法はありますか?他のJavaScriptライブラリと同じですか?

編集: これは私がそれを宣言した方法です。 self.CellList = ko.observableArray([]);

これはどのようにデータを入力するかです。

for (i = 0; i < cellList.length; i++) { 
      viewModel.CellList.push(cellList[i]); 
     } 

ここで、cellListはSignalRから受信した文字列です。より多くのコードなし

hub.client.beginGame = function (gameDetails, cellList) 
+0

'pathArray'は観測可能な配列ですか? ( 'ko.observableArray')そうでなければ、カッコを使う必要はありません。 – user3297291

+0

投稿に[mcve]を含めてください。あなたの問題を再現する方法がなければ、私たちは解決策を推測することしかできません。 – Jeroen

+0

正しくバインドしていますか?たとえば、これはどのようにあなたはKOの定期的な配列対観測可能な配列から結果を得るだろうか:https://jsfiddle.net/kasperoo/gtb2L0m5/しかし、それはあなたの手で、アレイ。 ID、クラス名、URLなどのパラメータを渡すことができる各セル用のミニオブジェクトを作成する方が良いでしょうか? – kasperoo

答えて

0

問題が何であるかを伝えるのは難しいですが、代わりに直接文字列を挿入する私は「cellList」に

ビュー内のロジックを持つ
var cell = function(data,index){ 
    var self = this; 

    self.class = index%2==0?'black':'white'; 
    self.id = 'prefix'+data.id 
} 

を各項目のVMを作成します何も問題ではありません。 VMにそれを引き出すことは、多くの問題を解決します。