次のようなモデルがあります。
function Foo() {
var self = this;
self.options = [{id: 1, text: "lorem"}, {id: 2, text: "ipsum"}];
self.selectedValue = ko.observable(initialValue);
self.selectedObject = ko.computed(function () {
return ko.utils.arrayFilter(self.fields, function (f) {
return f.id == self.selectedValue();
})[0];
});
}
もちろん、これはにバインドされていselect
ます:
<select data-bind="options: options,
optionsText: 'text',
optionsValue: 'id',
value: selectedValue">
ハックは、完全なオブジェクトにアクセスする必要がある別のバインディング (別のko.computed
オブジェクトで、表示されていません) があるためです。値はプレーンな Id である必要があるため、送信できます (標準form
ではなく標準を使用しています)。カスタムコール)
私はハックを取り除きたいです(私はさらにいくつかの場所でやっています)。理想的には、オブジェクトを持つ単一のselected
プロパティをモデルに定義しますが、select
値は送信時に正しくなります。
これも 2 つの方法で機能する必要があります。選択する初期値がある場合があります。
これは実行可能ですか?カスタムバインディングを調査する必要がありますか? すでに存在しますか?
逆の方法もできますが (つまり、現在行っているように)、よりクリーンにしたいと考えています。ヘルパーを書くだけでいいと思いますがlookup(array, property, value)
、もっと良い方法があるかもしれません。