0

ビュー モデルにオブジェクトのコレクションがあります。コントロールに値をバインドするときに問題が発生していますselect。値は JS オブジェクトであり、プリミティブ型ではありません。バインドされたコレクションに複数のオブジェクトがあり、selectコントロールを変更すると、他のすべてのオブジェクトの値が新しく選択された値に更新されます。すべての値がバインディング内の同じインスタンスにバインドされているようforeachです。エラーは、単に既存の行を編集するときではなく、新しい行が挿入されたときにのみ発生するようです。

私は多くの複雑さを取り除き、JSFiddle の問題を示す例を用意しました。

http://jsfiddle.net/zero21xxx/5vgDy/

エラーを表示する手順

  1. 行1のドロップダウンから決済タイプを選択します
  2. 右側の新しいドロップダウンから「2」を選択します。
  3. 行 2 のドロップダウンから決済タイプを選択します。
  4. 行 1 と行 2 の両方が、選択ボックスで「1 つ」に設定されます。

ある行を変更しても、他の行には影響しないと思います。

4

2 に答える 2

1

別のものを選択するたびにselectedDatabaseFieldavailableOptions.options. 各行は、選択肢と同じオプションに対してバインドされます。オプションが再構築されると、各行の選択された値は有効な選択肢ではなくなります。

オブジェクトがまったく同じに見えても、同じオブジェクトへの参照でない限り、同じではありません。

そのため、オプションが変更され、現在選択されている値が無効になったため、valueバインディングは最初のオプションを値として割り当てます (optionsCaption が指定されていない場合)。

そのため、オプションが既に構築されている場合、または同じデータベース フィールド オブジェクトに対してバインドするのではなく、行ごとに個別のオプションが必要な場合は、おそらくオプションを再構築したくないでしょう。

于 2012-06-12T04:22:01.227 に答える
1

セットアップ方法は少し複雑ですが、問題は、ID が期待どおりではないことだと思います。

 function getValues(tabId) {
                console.log("tabId " + tabId);
                if (lookUp[tabId]) {

それをコードに追加すると、同じタブ ID が表示されます。つまり、見た目から同じオブジェクトを扱っているということです。

getValues を変更するたびに

 function getValues(tabId) {
                console.log("tabId " + tabId);
                return  [new DatabaseField(nextId(), "Name", "Attorney Name", DataType.STRING.id),
                                                             new DatabaseField(nextId(), 
"Type", "Settle Type", DataType.DROPDOWN.id)];
}

また、[] ですべてのオブザーバブルをオブザーバブル配列に変更しました...

それはうまくいくようです。フィドル... http://jsfiddle.net/keith_nicholas/wmxJX/

于 2012-06-12T04:08:06.407 に答える