Загрузить значения enum в хранилище dojo - PullRequest
0 голосов
/ 20 октября 2018

У меня есть ENUM, подобный этому

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
                });

, но когдаЯ раскрываю выпадающий список ... он не расширяется без каких-либо ошибок в консоли ... Есть идеи, что я сделал не так?спасибо

1 Ответ

0 голосов
/ 21 октября 2018

В раскрывающемся списке ничего не отображается, потому что данные не массив, а объект js,

dojo / store / Memory в качестве данных требуется массив,

Таким образом, чтобы исправить это, вы можете отредактировать ваш объект, изменив объект в массив, или создать и объект из этого и установить в свой выбор, и это с помощью Object.values(yourObject), которые возвращают массивзначений из вашего объекта.

См. ниже Рабочий фрагмент:

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>
...