2013-09-06 2 views
7

オブジェクト。問題は、内側のchildオブジェクトが同じタイプではないことです。これを実行した後KOマッピングの問題は、私は、サーバーから次のデータを取得

ko.mapping.fromJS(data, viewModel.data); 

私が第一の目的は、データとタイプObjectchild性質を持っていることを取得します。しかし、2番目のオブジェクトはObservableのプロパティchildを持っています。アンラップされたオブジェクトはnullを返します。

どのようにしてオブジェクトを作成することができますか?どちらの場合でもオブジェクトは同じ型であり、一方は値を持ち、もう一方はnullです。サーバーの動作方法を変更することはオプションではありません。私はObjectnull、またはその両方がObservablesであると思います。

JsFiddle here

答えて

4

マッピングプラグインにchildプロパティのマッピング方法を伝えるには、create optionを使用する必要があります。

var mappingOptions = { 
    child: { 
     create: function(options) { 
      if (!options.data) 
       return null; 
      return ko.mapping.fromJS(options.data); 
     } 
    } 
} 

ko.mapping.fromJS(data, mappingOptions, viewModel.data); 

デモJSFiddle:あなたはObjectnullを持っているしたい場合はあなたの子供のプロパティがnullとき

は、だから、nullを返却する必要があります。

それとも、彼らは両方のObservablesたい場合:前述のように

var mappingOptions = { 
    child: { 
     create: function(options) { 
      return ko.observable(ko.mapping.fromJS(options.data)); 
     } 
    } 
} 

ko.mapping.fromJS(data, mappingOptions, viewModel.data); 
+0

null値のoptions.dataを常にテストし、空のko.observable()を返します。 –

0

、解決策は、マッピングオプションですが、ヌル値ため常にテストoptions.dataをすることを確認した後、空のko.observableを返します()、それ以外の場合はバインディングに多くの問題があるでしょう!私はそれを見つけるのに多くの時間を費やしました。

var mappingOptions = { 
    child: { 
     create: function (options) { 
      return options.data != null ? ko.observable(ko.mapping.fromJS(options.data)) : ko.observable(); 
     } 
    } 
} 
関連する問題