2017-08-16 8 views
0

ajaxで取得したオプションでselect要素を使用してフォームをリンクする例はありません。私は、私のビュー内のいくつかの選択リストを作成し、私のモデルデータから選択されたIDをデータリンクするために、ajaxを介してビューモデルプロパティを初期化したいと思います。モデルを更新するときに大きなリストをサーバーに送り返したくないので、コンパイルされたビューモデルの.unmap()を実行するときにこれらの配列は必要ありません。ですから、ProjectID、ProjectDescription、ProjectTypeID、ProjectPriorityIDのデータがあるとします。私のビューモデルでは、ajaxを介してProjectTypesとProjectPrioritiesのリストを取得し、リストから値を選択できるようにビューで使用する必要があります。 .unmap()を実行してサーバーに戻すときに、リストをデータの一部として取得せずにこれを達成する方法がわかりません。ajaxで取得したオプションを選択してマップを解除する

ビューモデルに「ProjectTypes」または「ProjectPriorites」のプロパティがある場合、それらは常に.unmap()を呼び出すときにデータの一部になります。

は異なる代替のアプローチがあります

+0

私の返信は役に立ちましたか?もしそうなら、それを受け入れたものとしてマークすることができますか?ありがとう... – BorisMoore

答えて

1

ありがとうございます。 1つは、動的に変更されないすべてのProjectTypesやユーザーの入力に基づいて更新可能な「プライマリデータ」などの「セカンダリデータ」の両方を含む単一のモデルを持つことです。その場合、unmap()を使用してVM階層からプレーンなJSONデータを取得するときに、その「プルーン」して関連する「プライマリ」パーツだけをサーバに送り返すことができます。

別のアプローチは、一次及び二次データを分離しておくことである - ので、モデルは単に「プライマリ」データであり、二次データが分離されている - 例えば、ヘルパーとして渡さ:

// Instantiate View Models 
var appVm = $.views.viewModels.MyModel.map(modelData); 
var typesVm = $.views.viewModels.MyTypes.map(typeData); 

$.templates("#appTemplate").link("#page", appVm, {types: typesVm});

<select data-link="typeId()">< 
    {^{for ~types.projectTypes()}} 
    <option value="{{:id()}}">{{:label()}}</option> 
    {{/for}} 
</select> 

また、それは基本的に「静的」である場合、二次データのビューモデルをコンパイルしないことを選択し、実行することができます。

$.templates("#appTemplate").link("#page", appVm, {types: typesData});

<select data-link="typeId()">< 
    {^{for ~types.projectTypes}} 
    <option value="{{:id}}">{{:label}}</option> 
    {{/for}} 
</select> 

別のアプローチは、CRUD/RESTのWebサービスアプローチサーバの更新を使用して、例えば、バックサーバに実際に変更されたデータ値または配列を送信することです。その場合は、データを比較するコードが必要です。または、漸進的な変化に対応するためにobserveまたはobserveAllを使用する必要があります。

関連する問題