Dashcode Web App: Wie programm gebundenen Array manipulieren in Datasource?
-
30-09-2019 - |
Frage
Ich habe angefangen. Ich verwende eine Dashcode Datenquelle und Bindungen, die Elemente in der WebView zu füllen, und es scheint alles gut so weit zu arbeiten.
Eine der Aufgaben in meinem Datasource ist ein Array von Objekten, dass ich programmatisch manipulieren möchte. Ich kann ganz gut die Objektwerte im Array ändern, aber wenn ich das Array ersetzt werden soll, oder alle Objekte in dem Array, meine gebundene Tabelle ist nicht in der Lage die hinzugefügten Objekte zu beobachten.
Hier ist der Code, dass ich dachte, würde lassen Sie mich einfach das gebundene Array mit neuen Inhalten ersetzen:
var dataSource = dashcode.getDataSource("reportData");
var newDetailArray = testArray();
dataSource.setValueForKeyPath(newDetailArray, "content.detailArray");
Aber das wirft die Ausnahme:
Exception while binding "content" to keypath "arrangedObjects " TypeError: Result of expression 'this.object.valueForKeyPath' [undefined] is not a function.
Gibt es etwas, was ich bin fehlt, dass lässt mich leicht den Inhalt programmatisch des Arrays manipulieren?
Lösung
Hier ist eine Lösung für das Problem:
1) Definieren Sie ein KVO Objekt in main.js zuerst. Dieser Schritt ist wichtig, da die Daten eines bestimmten Datenquelle sein bindable hat:
anObj = Class.create(DC.KVO, {
constructor: function(name) {
this.name = name;
}
});
2) Erstellen Sie ein Array, das Objekte enthält, die auf die "anObj" Klasse gehören:
function switchContent(event)
{
var myPerson = new anObj('Paul');
var myArray = new Array();
myArray.addObject(myPerson);
// 'dataSource' has to be defined in Dashcode as usual
var ds = dashcode.getDataSource('dataSource');
// replace content of datasource ds with myArray
ds.setContent(myArray);
}
Ich hoffe, diese Informationen helfen!