-1

まだ解決策が見つからない興味深いジレンマがあります...誰かが私を正しい方向に向けてくれることを願っています。

私はノックアウト/MVVMを使用していますが、同じデータに対してソリューションのどこにでもajaxリクエストを行うことにうんざりしていました...そこで、共通データをロードして管理する小さなライブラリを作成し、それを使い始めることにしましたそこの。これは機能し、問題ありません。

これに基づいて、複数のオプションを選択してサーバーに通知させる必要があるビューがたくさんあります。私はこれを行うためのいくつかのロジックを書きました。本質的に、これはチェックボックスを介して正常に機能し、オブジェクトでチェックして選択しました...そして、配列のループを終了すると、 isselected をチェックし、新しい配列を返します選択したオブジェクトの ID...

これが問題ですが、これはうまく機能します。私はエンティティごとに何度もそれをしなければなりません...だから、最適化気分で私は考えました...

代わりに(例):

  • Country ((基本機能/Language の定義を含むオブジェクト + が選択されている)
  • CountryList (選択した ID を返すための配列とロジックを含む)
  • 言語 (言語 + の定義を持つ基本関数/オブジェクトが選択されている)
  • LanguageList ((選択した ID を返すための配列とロジックを含む)
  • .....

私は次のような一般的な解決策を作ろうと試みることができると思いました...それ)

だから私は次のようなことをすることができます:着信JSON -> foreach BASEオブジェクトを作成し、BASE配列に入れます

isselected ロジックを追加し、id() プロパティがある限り、任意の汎用オブジェクトの id() を返すことができる CreateObservableArrayFunction (基本配列)。

この関数を使用して、MVC ビュー自体で使用することもできるはずです...

注...フィルタリングなどにも同じことが使用できます。

多分それはひどく説明しましたが、これはコードを常に複製する代わりに、他の人にも役立つと思います。

コメントしてくれてありがとう。

J.

4

1 に答える 1

0

バインディングは配列でも機能し、そのchecked配列から現​​在のアイテムを追加/削除します。

「国」の例では、次のように使用します。モデルを見る:

...
vm.CountryList = ko.observableArray(); // list of countries
vm.CountrySelectedIds = ko.observableArray(); // list of country ids 
...

テンプレート:

<div data-bind="foreach: CountryList">
    <input type="checkbox" data-bind="
        attr: {value: Id}, 
        checked: $parent.CountrySelectedIds" />
</div>

これは、「ID」が文字列の場合にうまく機能します。文字列以外のもの (Countryオブジェクト自体など) を保存したい場合は、 my checkedInArraybindingを確認してください。

于 2013-04-16T23:45:29.413 に答える