2

以下のように選択を定義しました

<select id="selProductType" data-bind="options: productType , value: editProductType , optionsText: 'Name'" />

以下は、ビューモデルで選択を埋めるための私のコードです

 // Loading combobox with Product Types
    $.getJSON("../RestService/Product/AllProductTypes",
      function (allData) {
          var mappedProductType = $.map(allData, function (item) {
              console.log(item.Id + ' ' + item.Name);
              return new productType(item);
          });
          self.productType(mappedProductType);

      });

ページを初期化するときに、選択するデフォルト値を設定したい。だから私は以下を試しました

self.editProductType(4);

しかし、オブジェクト 4 にはメソッド ID がないことを示す TypeError が返されます。

どうやってそれについて行くか。私はstackoverflowでも同様の投稿をしましたが、うまくいきませんでした。

ドロップダウン(選択)リストのノックアウトJSバインディング初期値/デフォルト値

4

1 に答える 1

2

指定しない場合:

optionsValue: 'Id'

data-bindでは、この場合のバインディング値はproductType配列のオブジェクトである必要があります。

デフォルトのオブジェクトを選択できます。

self.editProductType(self.productType()[2]);

optionsValueとは何ですか?

optionsTextと同様に、optionsValueという追加のパラメーターを渡して、KOが生成する要素にvalue属性を設定するために使用するオブジェクトのプロパティを指定することもできます。JavaScript関数を指定して、この値を決定することもできます。この関数は、選択された項目を唯一の引数として受け取り、要素のvalue属性に使用する文字列を返す必要があります。

通常、使用可能なオプションのセットを更新するときにKOが選択を正しく保持できるようにする方法としてのみ、optionsValueを使用する必要があります。たとえば、Ajax呼び出しを介して「車」オブジェクトのリストを繰り返し取得し、選択した車を確実に保持したい場合は、optionsValueを「carId」または各「車」オブジェクトが持つ一意の識別子に設定する必要があります。そうしないと、KOは、以前の「車」オブジェクトのどれが新しいオブジェクトのどれに対応するかを必ずしも知ることができません。

詳細については、http: //knockoutjs.com/documentation/options-binding.htmlをご覧ください。

于 2013-01-10T11:48:43.347 に答える