Как добавить (удалить) новые элементы в существующий источник данных в Dashcode? - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть вопрос, касающийся DashCode и dataSources: я определил объект JSON в файле javascript, связал его с источником данных и связал названия компаний с пользовательским интерфейсом (элемент списка). Объект JSON выглядит следующим образом:

{
    items: [
        { company:'A', product:'a1', color:'red' },
        { company:'B', product:'b2', color:'blue' },
        { company:'C', product:'c3', color:'white' }
    ]
}

Как программно добавить (или удалить) дополнительный «элемент» к существующему источнику данных? Я использовал следующий подход:

function addElement() {
    var newElement = [{company:'D', product:'d4', color:'yellow' }];
    var ds = dashcode.getDataSource('list');
    ds.arrangedObjects.addObject(newElement);
}

и

function delElement()
{
    var ds = dashcode.getDataSource('list');
    if (ds.hasSelection()) {
        var index = ds.selectionIndex();
        ds.arrangedObjects.removeObjectAtIndex(index);
    }
}

Этот фрагмент кода действительно добавляет (удаляет) дополнительный элемент в источник данных. Однако, когда я использую list.filterpredicate для поиска в списке нового элемента, новый элемент игнорируется.

Каков «правильный» подход для добавления (или удаления) элемента в существующий источник данных программным способом?

Ваша помощь ценится!

1 Ответ

2 голосов
/ 13 февраля 2011

Вот ответ на вопрос:

1) Определите объект KVO в main.js.Этот шаг важен, чтобы сделать объект привязываемым:

anObj = Class.create(DC.KVO, {
    constructor: function(company, product, color) {
       this.company = company;
       this.product = product;
       this.color = color;
    }
});

2) Обновленная версия функции «addElement»:

function addElement() {
    var newElement = new anObj('D', 'd4', 'yellow');
    var ds = dashcode.getDataSource('list');
    var inventory = ds.valueForKeyPath('content');
    inventory.addObject(newElement);
}

3) Обновленная версия функции 'removeElement 'выглядит примерно так:

function delElement()
{
    var ds = dashcode.getDataSource('list');
    if (ds.hasSelection()) {
        var index = ds.selectionIndex();
        var inventory = ds.valueForKeyPath('content');
        inventory.removeObjectAtIndex(index);
    }
}

Надеюсь, эта информация поможет!

...