我有的使用一些可编辑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。
有任何想法吗?
谢谢,哈雷尔
//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)});
这是我用来更新我的网格
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);
}
}
});
我没有设置你的代码的测试,但你应该能够只创建一个命名方法来做到这一点getValue
在你的小工具,返回值。
看看其他的例子(如dojox.grid.cells.ComboBox)来获得的getValue应该是什么样的想法。
文章来源: How to update a Dojo Grid cell value using a TooltipDialog (and DropDownButton)