TashCode Web App: Как программно манипулировать граничным массивом в DataSource?
-
30-09-2019 - |
Вопрос
Я начал использовать dashcode, чтобы написать интерфейс для представления данных отчета для некоторых наших инструментов какао. Я использую источник данных Dashcode и привязки для заполнения элементов в веб-просмотре, и все это, кажется, хорошо работает.
Один из объектов в моем источнике DataSource - это множество объектов, которые я хотел бы манипулировать программно. Я могу изменить значения объекта в массиве просто отлично, но если я хочу заменить массив, или любые объекты в массиве, моя связанная таблица не сможет наблюдать за добавленными объектами.
Вот код, который я подумал, позволит мне легко заменить связанный массив новым контентом:
var dataSource = dashcode.getDataSource("reportData");
var newDetailArray = testArray();
dataSource.setValueForKeyPath(newDetailArray, "content.detailArray");
Но это бросает исключение:
Exception while binding "content" to keypath "arrangedObjects " TypeError: Result of expression 'this.object.valueForKeyPath' [undefined] is not a function.
Есть ли что-то, что мне не хватает, что позволит мне легко манипулировать содержанием массива программно?
Решение
Вот решение проблемы:
1) Определите объект KVO в Main.js первым. Этот шаг важен, поскольку данные данного источника данных должны быть обязательными:
anObj = Class.create(DC.KVO, {
constructor: function(name) {
this.name = name;
}
});
2) Создайте массив, содержащий объекты, принадлежащие к классу «ANOBJ»:
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);
}
Я надеюсь, что эта информация поможет!