1

だから私はこのようなViewModelを持っています:

public class ViewModel{
   // Constructors, other properties
   public List<ItemViewModel> Items { get; set; }
   public ItemViewModel SelectedItem {get;set;}

   public void InitializeViewModel(){
       //Case 1:
       SelectedItem = null;
       //Case 2:
       SelectedItem = Item.FirstOrDefault();

   }
}

私のcshtmlには次のものがあります:

var viewModel = ko.mapping.fromJS(@Html.Raw(Model.ToJson()));

これで気付いたのは、ko.mapping.fromJSがケース 1を監視可能としてバインドしていることです。ただし、ケース 2が設定されている場合、ko.mapping.fromJS は SelectedItem をオブザーバブルとしてマップしません。

Case2 が実装され、ko.mapping.fromJS が SelectedItem プロパティをマップするようにコードを設定するにはどうすればよいですか?

壊れるコードは次のとおりです: https://skydrive.live.com/redir?resid=33048714B5BF3B4B!1261

4

1 に答える 1

2

あなたの場合、ko.mapping は ItemViewModel のプロパティをオブザーバブルにマップしますが、ItemViewModel 自体にはマップしません。ItemViewModel をマップしたい場合は、マッピングを次のように定義できます。

var mapping = {
            'SelectedItem': {
                create: function (options) {
                    return ko.observable(options.data);
                }
            }

そして、js 変換を呼び出します。

var viewModel = ko.mapping.fromJS(@Html.Raw(Model.ToJson()), mapping);
于 2013-02-27T01:48:51.150 に答える