1

私のJSでは、ノックアウトマッピングプラグインを使用して結果のjsonをバインドする、以下のajaxコールがあります。knockout.mapping.js、マップされた変数の一部のみを更新することはできますか?

$.getJSON("/Game/GetRack", function (data) { 
    game.rack = ko.mapping.fromJS(data); 
    ko.applyBindings(game.rack, $('.rack')[0]); 
}); 

/Get/GetRackリターン:あなたが見ることができるように、配列内の1つのオブジェクトのみが

[{"Color":3,"Letter":"a","Points":5},null,null]

あります。他の2つはヌルです。今、私にできることノックアウトマッピングを使用して

ko.mapping.fromJS([null, { Color: 55, Letter: "b", Points: 88 }, null], game.rack); 

正しくそう、私のビューを更新し、今私は2番目の位置にのみ文字Bを参照してください。他の2つはヌルです。

私の質問は次のとおりです:mapping.fromJSを使わずに特定の位置の値を更新できますか?

は、だから私は、インデックス0の文字Aを持っていると仮定すると、私は
{ Color: 55, Letter: "b", Points: 88 }
に2つ目のヌルを変更し、私のUIは自動的にこの変更を似せて更新したいです。これはどうすればできますか?


編集:

私はジョン・アールによって与えられた例で行くことにしました。残念ながら私の配列は2次元であるため、まだ問題はあります。

あなたはここにサンプルを持っている: http://jsfiddle.net/wgZ59/29/
(それはジョン・アールの例と非常によく似ていますが、2次元アレイを含みます)。

変更ボタンをクリックしても要素の値が変更されない理由を指摘できますか? HasMutated()を呼び出さずに値を変更することも可能ですか?

最後の1つ(前の2つが解決されている場合のみ)。 htmlテーブルを静的に作成することは可能ですか(たとえば、3x3となることがわかっているので、3行3列の2つのテーブルを印刷し、各セルをマトリックスセルにバインドします。問題、ノックアウト細胞の値を持っていなかったので...


EDIT2:私は私の上記の質問自分自身に答えるために管理

、フィドルの例はここにある:

http://jsfiddle.net/wgZ59/44/

だから、私はできますE静的なテーブルと、私は配列をこのように宣言するとき、個々の細胞を結合:

self.matrix = ko.observableArray([[0,0,0],[0,0,0],[0,0,0]]);

または

self.matrix = ko.observableArray([[,,],[,,],[,,]]);を。

値を更新することはできますが、静的テーブルでは機能しますが、動的テーブル(ノックアウトで動的に作成)では機能しません。この動作はフィドルページ(この編集の冒頭のリンク)で確認できます。 「変更」ボタンを押しても、動的に作成されたテーブルの値が更新されないのはなぜですか?

答えて

2

あなたが何をしようとしているのか正確にはわかりませんが、game.rackがobservableArrayの場合、JavaScriptを使用して操作できます。

http://knockoutjs.com/documentation/observableArrays.html

がそのページがobservableArray自体に用意されてい利用できる「ヘルパー」メソッドを示しています。ここ

はobservableArrays上のドキュメントページです。さらに、基になる配列を操作できますが、observableArrayで 'valueHasMutated()'を呼び出して、登録されているリスナーに変更を知らせる必要があります。

http://jsfiddle.net/jearles/wgZ59/8/

+0

おかげでジョン:ここ

は、操作を示す簡単なJSFiddleです。私はあなたのデザインパターンに従うことに決めましたが、私はまだ問題があります。私のEDITを見てもらえますか? –

+1

ノックアウトは実際にオブジェクトを扱うのが好きです。依存関係の追跡では$データ参照を追跡するのに問題があります。下のフィドルは機能しますが、単純なオブジェクトの配列([{v:1}、{v:2}、{v:3})に変更する必要があります。 http://jsfiddle.net/jearles/wgZ59/46/オブジェクトの操作のメリットの1つは、マッパーがこれをオブザーバブルに変換することです。オブザーバブルを変更しているので、 'valueHasMutated()'コールは必要ありませんもう –

+0

元のシナリオでオブジェクトを処理します。私はこれがjsfiddleに投稿したケースに影響する可能性があるとは考えていませんでした。私はここから進めることができます、もう一度ありがとう:)。 –