1

我决定给 Dojo 一个机会,而不是一次使用 JQuery,并且在操作数据存储时遇到了麻烦。我有一个绑定到 ItemFileWriteStore 内容的 DataChart,我从 Web 套接字 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',但看起来我只能使用它来将整个值块替换为一个单元。此外,我没有用于调用的“项目”句柄,这似乎只有在您使用newItemAPI 而不是使用 JSON 构建存储时才可用。

干杯!

斯科特

4

1 回答 1

1

首先,您需要获取 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) 返回 false,则 store.getValues(item, attribute) 将返回 []。)

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

values数组中的每个值添加为给定项目的给定属性的值。替换任何以前的值或值。调用 store.setValues(x, y, []) (将 作为空数组)与调用 store.unsetAttribute(x, y) 的效果相同。

于 2011-03-29T12:18:29.953 回答