1

ノックアウトを使用してドロップダウンにデータを入力しようとしています。optionsTextにデータを入力するために使用する配列は、JSONオブジェクトの配列です。optionsValueは、配列内のオブジェクトのインデックスまたは連番のいずれかである必要があります。

viewModelに次のコードがあります。

    self.job.submitOptionsArray = this.collection.toJSON();
    this.job.applyPreset = ko.observableArray(self.job.submitOptionsArray);

そして私の見解では:

<select name="" id="applyPreset" data-bind="options: applyPreset, optionsText: 'name', optionsValue: '???', value: somfn"></select>

jQueryを使用しないソリューションが必要です。

4

3 に答える 3

1

オプションバインディングを使用する代わりに、foreachバインディングを使用してオプションを手動で作成する方が有利な場合があります。

例えば:

<select data-bind="value: someValue, foreach: options">
    <option data-bind="text: title, attr: {value: $index()}"></option>
</select>
<div data-bind="text: someValue"></div>

あなたのオプションは何でもかまいません、私はこれでそれをテストしました:

self.options = ko.observableArray([{
   title: "Some text",
   otherData: "someOtherData",
   evenMore: "even more Data"
 }, {
   title: "Some text 2",
   otherData: "someOtherData",
   evenMore: "even more Data"
 }, {
   title: "Some text 2",
   otherData: "someOtherData",
   evenMore: "even more Data"
 }]);

キャプションを含める場合は、foreachバインディングを仮想要素に移動し、1つのオプションを他のオプションの上に手動で追加します。

于 2013-01-06T14:56:35.077 に答える
1

コレクションに応じてインデックスを作成するために、オブジェクトをフォーマットできます。手動サブスクリプションを使用すると、アレイが変更されるたびに1回または毎回実行できます。

this.job.applyPreset = ko.observableArray(self.job.submitOptionsArray);
this.job.applyPreset.subscribe(function(arrayValue) {
    var index = 0;
    ko.utils.arrayForEach(arrayValue, function(arrayItem){
        arrayItem.index = index++;
    })
})

indexあなたとして使用しoptionsValue、あなたは設定されています。

于 2013-01-06T18:09:34.990 に答える
0

これは自分で修正する必要があります。optionsValueはオブジェクトのメンバーのみを指すことができます。optionsValueを指定しない場合、値はオブジェクト自体になります。

オブジェクトにidメンバーがある場合は、それを使用するか、オブジェクトの代わりに実際のインデックスを書き込むwriteメソッドで計算されたobservableを使用します。

于 2013-01-06T14:53:41.317 に答える