2013-07-09 3 views
4

Я использую Dojo 1.9 с GridX 1.2. Я просто настраиваю ComboBox как редактор на ячейки в сетке.Как предоставить локальные переменные в качестве свойств редактора ячеек в редактируемом GridX?

Я нашел следующий синтаксис конфигурации в примерах:

editor: "dijit/form/ComboBox", 
    editorArgs: { 
     props: 'store: myStore, searchAttr: "label"' 
    }}, 

Проблема заключается в том, что props должен быть текст, который будет обработан. Он не принимает объект. Это означает, что я должен сделать myStore глобальной переменной, чего я бы хотел избежать.

Есть ли альтернативный способ настройки редакторов в GridX?

+0

https://github.com/oria/gridx/wiki/How-to-show-widgets-in-gridx-cells%3F – Philippe

+0

@Philippe: Вы имеете в виду, используя setCellValue? –

+0

Да. Назначение хранилища comboBox в этом методе должно работать ... Хранилище должно быть создано за пределами, хотя, возможно, вы можете сделать его свойством своей сетки, например declare.safeMixin (grid, {comboStore: new Memory()}) ... – Philippe

ответ

1

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> 

 Смежные вопросы

  • Нет связанных вопросов^_^