Как обновить значение ячейки Dojo Grid с помощью TooltipDialog (и DropDownButton) - PullRequest
1 голос
/ 19 августа 2009

У меня есть сетка додзё, которая использует некоторые редактируемые поля формы диджита. Все хорошо, пока я не попытаюсь внедрить ячейку (мульти) выбора страны в качестве всплывающей подсказки; то есть показать раскрывающуюся кнопку, которая открывает диалоговое окно всплывающей подсказки, заполненное массивом флажков, чтобы выбрать одну или несколько стран. После проверки и нажатия кнопки ОК ячейка должна обновиться со списком выбранных стран. Очевидно, я позабочусь об обновлении сервера через магазин позже.

Я реализовал диалоговое окно подсказки выбора страны, которое работает нормально, вот так:

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  },

Все работает нормально, но я не могу понять, как обновить содержимое ячейки и сохранить его после выполнения виджета. Кроме того, у меня нет идентификатора строки обновленной строки.

Есть идеи?

Спасибо, Harel

Ответы [ 3 ]

1 голос
/ 16 сентября 2010
//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)});
1 голос
/ 17 сентября 2010

Это то, что я использовал для обновления моей сетки

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);        
        }
    }
});
0 голосов
/ 20 августа 2009

Я не настраивал тест с вашим кодом, но вы можете сделать это, просто создав в вашем виджете метод с именем getValue, который возвращает значение.

Посмотрите на другие примеры (например, dojox.grid.cells.ComboBox), чтобы понять, как должен выглядеть getValue.

...