Extjs — я не могу получить магазин в контроллере, хотя он определяет (MVC)

Я работаю над шаблоном MVC. У меня есть две функции ниже, одна работает, а другая не работает. Взгляните на мой код контроллера;

Ext.define('MyApp.controller.program', {
    extend: 'Ext.app.Controller',

    stores: [
        'program'
    ],

    deleteWithConfirm: function(button, e, options) {
    var viewList = Ext.ComponentQuery.query('#programGrid')[0];
        var selection = viewList.getSelectionModel().getSelection()[0];
        if(selection)
        {
        Ext.MessageBox.confirm('Confirm', 'Are you sure you want to do that?', 
        function(btn, text ) {
            if(btn == 'yes') {
            console.log('yes clicked');

            this.getProgramStore().remove(selection); //console error message: "TypeError: this.getProgramStore is not a function"
            this.getProgramStore().sync();

            }
            if(btn == 'no') {
            console.log('no clicked');
            }
        }
        );
    }
    },

    justDelete: function(button, e, options) {
        var viewList = Ext.ComponentQuery.query('#programGrid')[0];
        var selection = viewList.getSelectionModel().getSelection()[0];
        if(selection)
        {
            this.getProgramStore().remove(selection);
            this.getProgramStore().sync();
        }
},


init: function(application) {
    this.control({
        "#tombolHapusProgram": {
            click: this.deleteWithConfirm //this is not working

    //click: this.justDelete //this is working
        }
    });
}

});

Функция justDelete работает хорошо. Но когда я изменяю этот код, добавляя окно сообщения, подтверждаю, код не работает, хотя я определяю хранилище.

Не могли бы вы показать мне, как решить эту проблему?


person kenzominang    schedule 16.03.2013    source источник


Ответы (2)


Вам нужно установить область для обратного вызова:

Ext.Msg.confirm('A', 'B', function() {
}, this);
person Evan Trimboli    schedule 16.03.2013
comment
Сообщение об ошибке исчезает, но я не вижу, чтобы журнал консоли щелкнул да или щелкнул нет. Это означает, что код не работает в нем. Есть ли другое решение? - person kenzominang; 16.03.2013
comment
@kenzominang Замените console.log на alert. - person leaf; 16.03.2013
comment
Замените }. this); на }, this); ;) - person leaf; 16.03.2013
comment
@wared Большое спасибо. Это работает хорошо. :) Код выглядит так: Ext.Msg.confirm('A','B',function(){ console.log('run in this'); }, this); - person kenzominang; 17.03.2013

Ваш экземпляр магазина в любом случае привязан к сетке, поэтому просто сделайте следующее:

viviewList.getStore().remove(selection)
person dbrin    schedule 16.03.2013