2011-07-14 18 views
2

私は子オブジェクトを持つビューモデルを持っています。子オブジェクトのプロパティのマッピングを定義するにはどうすればよいですか?ネストされた複合オブジェクトのノックアウトマッピング

public class ViewModel 
{ 
    public ManageComparatorSelectionsViewModel ManageComparatorSelectionsViewModel { get; set; } 
    public ManageComparatorItemViewModel CurrentComparatorItem { get; set; } 
} 


public class ManageComparatorSelectionsViewModel 
{ 
    public IList<Edition> Editions { get; set; } 
    public IList<Year> Years { get; set; } 
} 

public class ManageComparatorItemViewModel 
{ 
    public Edition ChosenEdition { get; set; } 
    public Year ChosenYear { get; set; } 
} 

私はノックアウト

var mapping = { 
     'ManageComparatorSelectionsViewModel.Editions': { 
      key: function (data) { 
       return ko.utils.unwrapObservable(data.Id); 
      } 
     }, 
     'ManageComparatorSelectionsViewModel.Years': { 
      key: function (data) { 
       return ko.utils.unwrapObservable(data.Id); 
      } 
     } 
    }; 
    var viewModel = ko.mapping.fromJS(viewModelData, mapping); 

    ko.applyBindings(viewModel); 

答えて

0

を初期化するには、次のことはあなたがアンラップするためにそれらを必要とする何らかの理由があるでしょうか? のプロパティ()を取得するか、ko.toJS()のアイテムを見て、いつでも同じオブジェクトにアクセスできます。

EDIT:ドロップダウンのために

<select data-bind=" template : { 'name' : 'templateID', foreach : optionlist } "></select> 

次のようになりますテンプレートの場合:

<script type="html/text" id="templateID"> 
     <option value="${ key }">${ text }</option> 
</script> 
+0

ああ、多分私は、適切な構文を理解しません。これらの配列にIDを設定しようとしたのは、配列の値が変更されなくてもドロップダウンリストが不必要に更新されているように見えるからです。例えば、私がviewmodelを更新して1つの配列に値を追加すると、すべての配列とドロップダウンボックスがリフレッシュされます。 – djmc

+0

モデルを選択リストにどのようにバインドしていますか?オプションで選択しますか?それは毎回リフレッシュを引き起こすからです。ほとんどの場合、ドロップダウンが表示されていない間に意味の後ろに更新されるので、問題はありません。しかし、それがうまくいかない場合は、テンプレートバインディングを使用することができます。メインポストを更新する方法を更新しました。 –

関連する問題