0

HTMLページのすべての観測可能なアイテムを返す関数を作成しました。この関数の例は次のとおりです。

<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer2" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer3" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer4" class="InputText"/>

関数はreutrn['AOfficer'、'AOfficer2'、'AOfficer3'、'AOfficer4']

そして今、私は上記のデータバインディング要素のリストを観察可能にしたいです

viewModel = {
AOfficer : ko.observable(),
AOfficer2 : ko.observable(),
AOfficer3 : ko.observable(),
AOfficer4 : ko.observable(),
}
ko.applyBindings(viewModel);

上記はこれを行うための非動的な方法です。しかし、私はこの問題を解決するための動的な方法を見つけることができないようです。

これをどのように解決しますか?解決策はありますか?回避策?

みんなありがとう

4

2 に答える 2

2

私が過去に使用したオプションの1つは、既存の値からビューモデルにデータを入力するカスタムバインディングを作成することです。

何かのようなもの:

ko.bindingHandlers.valueWithInit = {
    init: function(element, valueAccessor, allBindingsAccessor, data) {
        var property = valueAccessor(),
            value = element.value;

        //create the observable, if it doesn't exist 
        if (!ko.isWriteableObservable(data[property])) {
            data[property] = ko.observable();
        }
        data[property](value);

        ko.applyBindingsToNode(element, { value: data[property] });

    }
};

バインディングを追加するときは、プロパティ名を文字列として指定する必要があります。これにより、バインディングが最初に存在しないときに失敗しないようになります。

このメソッドは、オブザーバブルが存在しない場合、または単に既存のオブザーバブルに要素の値を入力する場合に、オブザーバブルを作成します。

こちらのサンプル:http://jsfiddle.net/rniemeyer/BnDh6/

于 2012-06-18T13:13:14.027 に答える
0

多分あなたはそれをobservableArray()にしようとすることができます:

var Officers = ko.observableArray([{name: AOfficer1, o_value: xxx},{name: AOfficer2, o_value: yyy}, and so on]);

そしてあなたのHTMLは:

<ul data-bind="foreach: Officers">
<li><span data-bind="text: name"></span><input type="text" data-bind="value: o_value" class="InputText"/></li>
</ul>
于 2012-06-18T11:03:01.107 に答える