【问题标题】:set two different memory stores for one dojo widget (dijit/form/FilteringSelect) at the same time同时为一个 dojo 小部件(dijit/form/FilteringSelect)设置两个不同的内存存储
【发布时间】:2015-01-21 07:05:24
【问题描述】:

我有两种不同的 JSON 结构。一个代表系统的个人用户,另一个代表由这些用户组成的组。所以,我用这些创建了两个内存存储(每个都有不同的 idProperty - userId 和 groupId,分别)。

我有一个过滤选择下拉列表,我的要求是将这两个都添加为列表的数据存储,以便可以从下拉列表中选择有效用户或有效组。

我能想到的两种可能的方法: 1) 通过创建两个 JSON 的一个公共内存存储 - 但 idProperty 不同,所以不确定这怎么可能 2)通过将两个内存存储添加到小部件但又不同的 idProperty 所以不确定。

我对使用 Dojo 非常陌生,因此非常感谢任何帮助。提前致谢!

【问题讨论】:

    标签: dojo


    【解决方案1】:

    我认为,如果您使用 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"
            };
        }));
    });
    

    在本例中,我们有两个数组 groupsusers,为了合并它们,我使用了 dojo/_base/arraymap() 函数,然后我连接了两个结果。

    它们仍然包含它们的原始 ID 和类型,因此您仍然可以引用原始对象。

    从我之前的经验中,我了解到您的模型数据不应该代表纯粹的业务数据,而是在视图/用户界面中易于使用的数据。

    通过为两个数组提供相似的对象结构,您可以轻松地在 dijit/form/FilteringSelect 中使用它们,您可以在此处查看:http://jsfiddle.net/ut5hjbyb/

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多