我认为,如果您使用 store 来表示某些东西(模型数据),则应该形成它以便可以在小部件中正确使用它。
因此,在您的情况下,我会将它们都添加到一个商店中。如果它们具有不同的 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,为了合并它们,我使用了 dojo/_base/array 的 map() 函数,然后我连接了两个结果。
它们仍然包含它们的原始 ID 和类型,因此您仍然可以引用原始对象。
从我之前的经验中,我了解到您的模型数据不应该代表纯粹的业务数据,而是在视图/用户界面中易于使用的数据。
通过为两个数组提供相似的对象结构,您可以轻松地在 dijit/form/FilteringSelect 中使用它们,您可以在此处查看:http://jsfiddle.net/ut5hjbyb/