2016-08-09 22 views
0

Ich möchte Knockout-Mapping verwenden, um nur eine bestimmte Liste von Eigenschaften und nicht andere Eigenschaften (die im Modell vorhanden sind) zuzuordnen.knockout.mapping-Plugin, um nur bestimmte Eigenschaften zuzuordnen

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

Wenn ich knockout.mapping.fromJS(data, {}, myModel) verwende, würden alle Eigenschaften zugeordnet werden. Ich weiß, dass ich benutzerdefinierte Zuordnung knockout.mapping.fromJS(data, customMapping, myModel) hinzufügen kann, jedoch weiß ich nicht, ob es eine solche Option wie "mapOnlyGivenProperties" gibt. Ich weiß, dass es "ignore" Eigenschaft gibt, aber ich will entgegengesetzte Funktionalität.

Antwort

2

Sie können die Option 'Ignorieren' verwenden oder eine Schreibfunktion verwenden, die nur die enthaltenen Eigenschaften filtert (sehen Sie sich den folgenden Code an).

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

sehr schöne Lösung – dmoo

+0

@dmoo, danke für nette Worte :) – TSV