2017-05-21 1 views
0

Ich habe ein Array von mehrfach ausgewählten Optionen, die in einem bestimmten JSON-Format gesendet werden müssen. Doch in Knockoutjs, ich bin dies immer mit dem ausgewählten:reformat knockoutjs JSON

"UserGroups":["Group1","Group2"]" 

Aber ich bin braucht es stattdessen wie diese zu

"UserGroups" : ["UserGroupName" : "Group1", "UserGroupName : "Group2"] 

Hier ist meine Viewmodel:

var viewModel = new UserModel([ 
{ id: ko.observable(""), 
firstName: ko.observable(""), 
lastName: ko.observable(""), 
UserGroupsListOptions: ["Group1", "Group2", "Group3"], 
UserGroups: ko.observable("") }]); 
ko.applyBindings(viewModel); 
+0

Usergroups: [{ "UserGroupName": "Gruppe1"}, { "UserGroupName: "Gruppe2"}]., Die ein Array von Objekten ist – Bindrid

+0

verstanden, wie dann würde ich dies von Objekten zu einem Array ändern? – rStackSharper

Antwort

0

Ich würde vorschlagen, dass Sie beginnen, indem Sie die Unterschiede (und Ähnlichkeiten) zwischen Javascript-Objekten ({ }) und Arrays ([ ]) nachschlagen.

Wie gesagt, Ihr gewünschtes Format ist kein gültiges Javascript. Sie wollten wahrscheinlich ein Array von Objekten erstellen.

Sie erhalten eine Funktion benötigen, die einen String und gibt ein Objekt zurück:

var makeGroup = function(groupName) { 
    return { 
    userGroupName: groupName 
    }; 
} 

Da Ihr UserGroupName Strings bereits in einer Reihe sind, können Sie map verwenden, eine Methode, die in einem Array leicht verfügbar ist und kann verwendet werden, um den Inhalt in eine neue Anordnung zu transformieren:

var UserGroupsListOptions = 
    ["Group1", "Group2", "Group3"].map(makeGroup); 

Weitere Anmerkungen:

  • In JavaScript beginnen Variablen (die keine Konstruktoren sind) normalerweise mit einem Kleinbuchstaben. Dies kann auch helfen, anzugeben, welche serverseitigen Daten und welche transformierten Daten sind.
  • Ihr Ansichtsmodell besteht aus einer Reihe ziemlich komplizierter Objekte ... Sie könnten auch ein anderes ViewModel erstellen, das Ihnen hilft, die inneren Objekte zu erstellen.