【问题标题】:Load enum values into dojo store将枚举值加载到 dojo 存储中
【发布时间】:2019-03-25 07:23:40
【问题描述】:

我有一个这样的枚举

define({
    DEFAULT:1, 
    DDL:2,
    props:{
        1:{name: 'Default', value:1, id:1},
        2:{name: 'DDL', value:2, id:2}
}
});

我想把它加载到dijit/form/FilteringSelect

这是我的代码

var store = new Memory({
                    idProperty: "id",
                    data: type.props
                });
var os = new ObjectStore({objectStore: store});

this.unitType = new Select({
                    name : 'name',
                    label : dojoConfig.i18n.unitType,
                    placeHolder: dojoConfig.i18n.unitType,
                    required: false,
                    store: os,
                    value: type.props[1].id,
                    searchAttr: 'name',
                    labelAttr: "name",
                    trim: true
                });

但是当我展开下拉列表时......它不会在控制台中没有任何错误的情况下展开......知道我做错了什么吗?谢谢

【问题讨论】:

    标签: javascript dojo store dijit.form


    【解决方案1】:

    你的下拉菜单没有显示任何东西,因为给定的数据不是一个数组,而是一个 js 对象,

    dojo/store/Memory需要一个数组作为数据,

    因此,要解决此问题,您可以通过将对象更改为 array 来编辑对象,或者从 this 中创建和 object 并设置为您的 select ,并且 this 使用 Object.values(yourObject) 从您的对象返回一个值数组。

    参见下面的工作 sn-p :

    require(["dijit/registry", "dijit/form/FilteringSelect", "dojo/store/Memory", "dojo/data/ObjectStore"],
      function(registry, FilteringSelect, Memory, ObjectStore) {
    
        var type = {
          DEFAULT: 1,
          DDL: 2,
          props:{
            1:{name: 'Default', value:1, id:1},
            2:{name: 'DDL', value:2, id:2}
          }
        };
        
        type.props = Object.values(type.props);
        
        var store = new Memory({
          idProperty: "id",
          data: type.props
        });
        var os = new ObjectStore({
          objectStore: store
        });
    
        new FilteringSelect({
          name: 'name',
          required: false,
          store: os,
          value: type.props[1].id,
          searchAttr: 'name',
          labelAttr: "name",
          trim: true
        }, "select");
    
      });
    <script>
      dojoConfig = {
        isDebug: true,
        parseOnLoad: true,
      };
    </script>
    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
    <link href="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dijit/themes/claro/claro.css" rel="stylesheet" />
    
    <body class="claro">
      <select id="select">
      </select>
    
    </body>

    【讨论】:

    • @firstNamelastName 这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    相关资源
    最近更新 更多