В настоящее время я работаю с extjs 3.4 и сталкиваюсь со следующей проблемой. Я создаю GridPanel в конструкции. Я устанавливаю имя переменной с именем «bla» со значением «test2» после того, как я установил этот атрибут, я предупреждаю его, чтобы убедиться, что он установлен правильно. Это работает !. Однако, когда на моей панели сетки была нажата кнопка, он больше не может читать атрибут bla и говорит, что он «undefined».

Я пропустил части кода, которые не имеют смысла в вопросе;)

См. Код ниже

    Ext.define('SC.view.WorkOrderHourGrid' ,{

    extend: 'Ext.grid.GridPanel',

    bla:"test",
    tbar: null,

    store:null,
    plugins:null,

    //Methods


    constructor:function(p_Store,config){
        this.tbar = this.buildTbar();
        this.bla = " test2";
        this.store = p_Store;

        //alerting bla attribute outputs test 2 !!
        alert(this.bla);


        var rowEditor = new Ext.ux.grid.RowEditor({
            saveText: 'Update'
        });

        this.plugins = [rowEditor];


        SC.view.WorkOrderHourGrid.superclass.constructor.call(this,config);
    },
    buildTbar:function()
    {
        return [{
            text: 'Toevoegen',
            handler: function(){
                tryOut();
            },
            //the button i was talking about
            handler:this.onAdd


        }];
    },
    onAdd:function(btn, ev)
    {
        //this outputs undefined !!!
        alert(this.bla);
    }


});
0
user1035654 7 Сен 2013 в 14:21
Я думаю, что эта область относится к кнопке, а не к сетке, вот почему это происходит. Найдите this.refOwner.bla или попробуйте найти этот компонент по идентификатору
 – 
kuldarim
7 Сен 2013 в 15:13

1 ответ

Лучший ответ

Область действия функции onAdd - это кнопка. Поэтому bla не определено.

Попробуйте изменить функцию buildTbar следующим образом:

buildTbar:function()
{
    return [{
        text: 'Toevoegen',
        scope: this,
        //the button i was talking about
        handler:this.onAdd


    }];
},

Я не тестировал! :)

0
honederr82 7 Сен 2013 в 15:14
Спасибо, работает, мне кажется странным, что он выполняет метод расширенного класса gridpanel, так как он не должен входить в область действия, чем 2, верно?
 – 
user1035654
7 Сен 2013 в 15:27
Это может немного сбивать с толку. Параметр "scope" сообщает, в какой области видимости выполняется обработчик, и кто обычно будет работать в области видимости компонента; "this" (используется в this.onAdd и в области видимости) просто сетка :)
 – 
honederr82
7 Сен 2013 в 15:56