2017-07-26 2 views
1

Ich entwickle einen Teil der Web-GUI, der VM-Sets anzeigt, die während der Mandantenerstellung in einer Cloud verfügbar sind. Das Ziel dieses Set repräsentiert sieht wie folgt aus:Knockout - Daten werden nicht aus einem beobachtbaren Array abgerufen

function BoxTemplate(data) { 
    var self = this; 
    self.id = ko.observable(0); 
    self.name = ko.observable(""); 
    self.description = ko.observable(""); 

    if (data) { 
     self.id(data.Id); 
     self.name(data.Name); 
     self.description(data.Description); 
    } 
} 

Im nächsten Schritt versuche ich nur IDs aus dem Array fo die obigen Aufgaben abzurufen. Der Code wird als die folgenden:

var boxTemplatesIds = ko.observableArray([]); 

for (var i = 0; i < self.boxTemplatesList.length; i++) { 
    boxTemplatesIds.push(self.boxTemplatesList()[i].id); 
} 

var boxTemplatesIdsAsJson = ko.toJSON(boxTemplatesIds); 

The boxTemplatesIdsAsJson wird dann als Argument in dem Anforderungs Körper geleitet. Wenn ich es jedoch drucke, ist es leer und NULL wird an das entsprechende Argument in der unterlegenden REST-API übergeben. Ich versuchte verschiedene Ansätze, aber es war für niemanden. Können Sie mir helfen herauszufinden, was mit meinem Code nicht stimmt? Ich wäre dankbar. :)

+0

'self.boxTemplatesList.length' sollte' self.boxTemplatesList() sein length' sonst nicht Ihre Schleife laufen als 'length' 0. – haim770

+0

Al zurückgibt. Warum also "observableArray" verwenden, wenn nur JSON benötigt wird? Versuchen Sie stattdessen: 'var boxTemplatesIdsAsJson = JSON.stringify (self.boxTemplatesList(). Map (Funktion (x) {return x.id;}))' – haim770

+0

Ihr erster Kommentar war es. Ich habe es geändert und es funktioniert. Vielen Dank! Eigentlich brauche ich JSON nicht. Es war nur eine Lösung für das Problem, das mir mein Teamkollege vorgeschlagen hatte. Ich brauchte eher ein Array, um es als Argument zu übergeben. –

Antwort

1

Wenn die self.boxTemplatesList eine beobachtbare Anordnung der BoxTemplate Objekte ist, die id Eigenschaft ist ko.observable, und Sie müssen runde Klammern verwenden, um es Wert ist (self.boxTemplatesList()[i].id()):

for (var i = 0; i < self.boxTemplatesList.length; i++) { 
    boxTemplatesIds.push(self.boxTemplatesList()[i].id()); 
} 

oder nur map mit :

var boxTemplatesIds = ko.observableArray(self.boxTemplatesList().map(
    function(item) { return item.id(); } 
)); 
Verwandte Themen