我有两种不同的JSON结构。一个代表系统的各个用户,另一个代表由这些用户组成的组。所以,我用这些创建了两个内存存储(每个都有不同的idProperty - userId和groupId)。
我有一个filteringSelect下拉列表,我的要求是将这两个作为列表的数据存储添加,以便可以从下拉列表中选择有效用户或有效组。
我可以想到这样做的两种可能方式: 1)通过创建两个JSON的一个公共内存存储 - 但idProperty是不同的,因此不确定这是如何可能的 2)通过将两个内存存储添加到窗口小部件,但又不同的idProperty,所以不确定。
我对使用Dojo非常新,所以任何帮助都会真正得到应用。提前谢谢!
答案 0 :(得分:1)
我认为,如果你使用商店来表示某些东西(模型数据),它应该被形成,以便它可以在一个小部件中正确使用。
所以在你的情况下,我会将它们都添加到一个商店。如果它们具有不同的ID(例如,当它是后端服务的结果时),那么您可以将两种类型的模型映射到单个对象结构中。例如:
var groups = [{
groupId: 1,
groupName: "Group 1",
users: 10
}, {
groupId: 2,
groupName : "Group 2",
users: 13
}, {
groupId: 3,
groupName : "Group 3",
users: 2
}];
var users = [{
userId: 1,
firstName: "John",
lastName: "Doe"
}, {
userId: 2,
firstName: "Jane",
lastName: "Doe"
}, {
userId: 3,
firstName: "John",
lastName: "Smith"
}];
require(["dojo/store/Memory", "dijit/form/FilteringSelect", "dojo/_base/array", "dojo/domReady!"], function(Memory, FilteringSelect, array) {
var filterData = array.map(groups, function(group) {
return {
id: "GROUP" + group.groupId,
groupId: group.groupId,
name: group.groupName,
type: "group"
};
});
Array.prototype.push.apply(filterData, array.map(users, function(user) {
return {
id: "USER" + user.userId,
userId: user.userId,
name: user.firstName + " " + user.lastName,
type: "user"
};
}));
});
在此示例中,我们有两个数组groups
和users
,为了合并它们,我使用了map()
dojo/_base/array
函数,然后我连接了两个结果。< / p>
它们仍然包含原始ID和类型,因此您仍然可以引用原始对象。
根据我之前的经验,我了解到您的模型数据不应代表纯粹的业务数据,而应代表在视图/用户界面中易于使用的数据。
通过为两个数组提供类似的对象结构,您可以在dijit/form/FilteringSelect
中轻松使用它们,您可以在此处看到:http://jsfiddle.net/ut5hjbyb/