Dojo DataChart и ручное обновление ItemFileWriteStore - PullRequest
1 голос
/ 29 марта 2011

Я решил попробовать Dojo вместо того, чтобы один раз использовать JQuery, и у меня возникают проблемы с управлением хранилищем данных. У меня есть DataChart, привязанная к содержимому ItemFileWriteStore, которое я заполнил вручную из сообщения JSON веб-сокета:

fakeData = {
        "identifier": "name",   
        "label": "Some data i'd like to add to later",
        "items": [
            {
                "name": "appendToMe",
                "values": [0.0, 1.0, 2.0, 3.0, 2.0, 1.0, 0.0]
            }
        ]
    };

store = new dojo.data.ItemFileWriteStore({
        data: fakeData
    });

var chart = new dojox.charting.DataChart("chartDiv", {});
chart.setStore(store, {"name":"*"}, "values");  

На этом этапе график отображает серию "appendToMe", которую я создал. Затем я получаю другое сообщение, содержащее новое числовое значение для списка значений "appendToMe". Как добавить его в магазин, и этого будет достаточно для запуска обновления графика?

Я посмотрел на [] (write API) 'store.setValue', но похоже, что я могу использовать это только для замены целого блока значений как одной единицы. Кроме того, у меня нет дескриптора элемента для использования с вызовом, который, по-видимому, доступен только в том случае, если вы используете API newItem вместо создания хранилища с помощью JSON.

ура!

Scott

1 Ответ

1 голос
/ 29 марта 2011

Сначала вам нужно получить элемент appendToMe.

store.fetchItemByIdentity({identity : 'appendToMe', 
                                      onItem : function (item) {
   var itemValues = store.getValues(item, 'values');
   itemValues.push(someNewValue);
   store.setValues(item, 'values', itemValues);
}});

Затем в onItem получите ваши значения, измените их, а затем установите их снова, используя store.setValue ()

Как отмечено, getValues ​​необходимо использовать для возврата массива значений вместо обычного getValue, который никогда не возвращает массив. И аналогично с setValues.

http://dojotoolkit.org/api/1.6/dojo/data/api/Read

Этот метод getValues ​​() работает просто как метод getValue (), но getValues ​​() всегда возвращает массив а не одно значение атрибута. Массив может быть пустым, может содержать одно значение атрибута или может содержать много значений атрибутов. Если товар не имеет значения для данного атрибут, тогда getValues ​​() будет вернуть пустой массив: []. (Так что если store.hasAttribute (item, attribute) имеет возвращение ложного, то store.getValues ​​(элемент, атрибут) будет возврат [].)

setValues ​​() http://dojotoolkit.org/api/1.6/dojo/data/api/Write

Добавляет каждое значение в массив values ​​ в качестве значения данного атрибута на данный предмет. Заменяет любой предыдущий значение или значения. призвание store.setValues ​​(x, y, []) (с значения (пустой массив) имеют тот же эффект, что и вызов store.unsetAttribute (x, y).

...