QUICK FIX: вместо того, чтобы создавать его как глобальную переменную, добавьте его в пространство имен, которое широко используется для этих случаев. Итак, создавая хранилище, добавьте его в определенное пространство имен и используйте его в props
.
var ns = {};
//use this namespace for all objects subject to grid/a particular section/anything
ns.myStore = new Memory({
data: [
{name:"Option 1", id:"OP1"},
{name:"Option 2", id:"OP2"},
{name:"Option 3Samoa", id:"OP3"}
]
});
props: 'store: ns.myStore, searchAttr: "label"'
Таким образом, мы можем избежать объединения глобальных объектов непосредственно в объект окна.
РЕКОМЕНДУЕТСЯ FIX: В строке шаблона, который вы передаете для этого столбца, вместо того, чтобы использовать выпадающий по умолчанию, используйте собственный виджет.
И в этом виджетах переопределить метод postCreate
и установить нужный магазин.
define([
"dojo/_base/lang",
"dijit/form/ComboBox",
"dojo/store/Memory"
], function(lang, comboBox, Memory) {
return dojo.declare("myapp.widget.MyComboBox", [ dijit.form.ComboBox], {
// summary:
//Custom sub-class of ComboBox with following functionality:
//This will set the desired store
postCreate: function(){
// summary:
// This will call default postCreate and additionally create/set store:
this.inherited(arguments);
var wid = this;
//if store is static get storeObj from a json file
//if store comes from backend, make the call here and get storeObj
dojo.xhrGet({
url: "filenameOrUrl",
handleAs: "json"
}).then(function(result){
var storeObj = new Memory(result);
wid.set("store",storeObj);
});
}
});
});
Теперь вы это в шаблоне для этой колонки. Обратите внимание, что мы не должны упоминать магазин здесь ни как строку, ни объект, так как сам виджет будет загружать хранилище после его создания.
<div data-dojo-type="myapp/widget/MyComboBox"
style="width: 100%"
data-dojo-attach-point="gridCellEditField"
></div>
https://github.com/oria/gridx/wiki/How-to-show-widgets-in-gridx-cells%3F – Philippe
@Philippe: Вы имеете в виду, используя setCellValue? –
Да. Назначение хранилища comboBox в этом методе должно работать ... Хранилище должно быть создано за пределами, хотя, возможно, вы можете сделать его свойством своей сетки, например declare.safeMixin (grid, {comboStore: new Memory()}) ... – Philippe