2016-08-09 3 views
0

ノックアウトマッピングを使用して、プロパティのリストのみをマップし、他のプロパティ(モデルに存在するもの)はマッピングしません。特定のプロパティのみをマップするknockout.mappingプラグイン

var propertiesToMap = ["PeriodStartDate", "PeriodEndDate", ...] 

私はknockout.mapping.fromJS(data, {}, myModel)を使用する場合は、すべてのプロパティがマップされます。 私はカスタムマッピングknockout.mapping.fromJS(data, customMapping, myModel)を追加できますが、 "mapOnlyGivenProperties"のようなオプションが存在するかどうかはわかりません。 "ignore"というプロパティがありますが、逆の機能が必要です。

答えて

2

'ignore' mappingsオプションまたは書き込み関数を使用できます。この関数は、含まれているプロパティのみをフィルタリングします(下のコードを参照してください)。

var mapping = { 
 
    'ignore': ["ignoredProperty"] 
 
} 
 

 
var data = { 
 
    propertyToInclude: 1, 
 
    alsoIncludeThis: "str", 
 
    ignoredProperty: "some val" 
 
} 
 

 
var viewModel = ko.mapping.fromJS(data, mapping); 
 
//debugger; 
 
console.log(viewModel.alsoIncludeThis()); 
 
console.log(viewModel.ignoredProperty); 
 

 

 

 
var includesList = ["propertyToInclude", "alsoIncludeThis"]; 
 

 
function leaveJustIncludedProperties(data, includesList) { 
 
    var result = {}; 
 
    (includesList || []).forEach(function(propertyName) { 
 
    result[propertyName] = data[propertyName]; 
 
    }); 
 
    return result; 
 
} 
 
var viewModel1 = ko.mapping.fromJS(leaveJustIncludedProperties(data, includesList), mapping); 
 
//debugger; 
 
console.log(viewModel1.alsoIncludeThis()); 
 
console.log(viewModel1.ignoredProperty);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.js"></script>

+0

非常に素晴らしいソリューション – dmoo

+0

@dmoo、優しい言葉をありがとう:) – TSV

関連する問題