如何更新使用TooltipDialog(和DropDownButton)道场网格单元格的值(How

2019-08-01 18:10发布

我有的使用一些可编辑dijit表单域道场网格。 一切都很好,直到我尝试OT实现一个国家(多)选择单元格作为工具提示对话框; 即显示一个下拉按钮,打开一个复选框数组填充,选择一个或多个国家的提示对话框。 一旦检查,并单击OK,细胞应与选定的国家的名单进行更新。 很显然,我带你去通过专卖店后来在更新服务器的照顾。

我已经实现了一个国家选择工具提示对话框,像这样正常工作:

dojo.provide("CountrySelector");  
dojo.declare(
    "CountrySelector",
    [dijit.form.DropDownButton],
    {
        label: 'Countries',
        dropDown: new dijit.TooltipDialog({ execute: function() { 
                                                console.log("EXECUTE : ", arguments[0]);
                                                this.value = arguments[0].country;
                                                }, href:'/cm/ui/countries' }),

        postCreate: function() {
            this.inherited(arguments);
            this.label = this.value;
            dojo.connect(this.dropDown, 'onClose', function() {  console.log('close');  });  

            console.log("CountrySelect post create", this);

        },
     }
);

与网格单元的类型为:

{ name: 'Countries',           field: 'targeting.countries',           editable: true, hidden: false, type:dojox.grid.cells._Widget, widgetClass: CountrySelector  },

所有工作正常,但我想不出如何更新单元格的内容,一旦被运行的微件存储。 同时,我似乎不具备更新的行的行ID。

有任何想法吗?

谢谢,哈雷尔

Answer 1:

//Layout:
gridLayout: {rows: [{name: 'Coll Name',field: 'colField', type: dojox.grid.cells.ComboBox, editable:'true', width:'8%',options: [], alwaysEditing:false}]}

//Grid Store:
this.gridStore = new dojo.data.ItemFileReadStore({data: {items: data}});

//
var setOptions = function(items, request){
   this.gridLayout.rows[0].options.push('Val 1','Val 2'); 
   this.gridLayout.rows[0].values.push('1','2'); 
   dojo.connect(this.gridLayout.rows[0].type.prototype.widgetClass.prototype, "onChange",this, "_onComboChange");
  }

this.gridStore.fetch({onComplete: dojo.hitch(this,setOptions)});

_onComboChange: function (selectedOption) {
  console.info("_onComboChange: ",selectedOption);
 },


// If you need to populate combos with different values you can use onItem
var getArray = function(item, request){
  // populate one by one 
  // attach an event to each combo
}
this.gridStore.fetch({onItem: dojo.hitch(this,getArray)});


Answer 2:

这是我用来更新我的网格

var idx = yourGrid.getItemIndex(item);
if (idx >- 1) {
    yourGrid.updateRow(idx);         
}

更多详情


每一行是由它的标识符所标识

yourGrid.store.fetchItemByIdentity({
    identity: <yourIdentity>,
    onItem: function(item){
        // Update your attributes in the store depending on the server response
        // yourGrid.store.setValue(item, <attribute>,<value>);
        var idx = yourGrid.getItemIndex(item);
        if (idx >- 1) {
            yourGrid.updateRow(idx);        
        }
    }
});


Answer 3:

我没有设置你的代码的测试,但你应该能够只创建一个命名方法来做到这一点getValue在你的小工具,返回值。

看看其他的例子(如dojox.grid.cells.ComboBox)来获得的getValue应该是什么样的想法。



文章来源: How to update a Dojo Grid cell value using a TooltipDialog (and DropDownButton)
标签: grid dojo