Сброс обработчиков событий в ExtJS - PullRequest
0 голосов
/ 13 октября 2010

У меня есть страница, где есть несколько записей. Каждая запись имеет кнопку, чтобы открыть диалоговое окно для создания имени. Затем имя создает связанную запись в базе данных и обновляет исходную запись.

Создано единственное диалоговое окно, и я хочу показать диалоговое окно, получить результат и вернуть его в правильную запись.

Код ниже работает один раз, но не работает второй раз. Я вижу, что нажата кнопка «Создать», но событие не получено.

Большое спасибо за вашу помощь.

TrailNamePresenter.prototype.onCreateTrailClick = function (trailSegment, combo, personalRouteId) {
if (!this.createTrailWindow) {
    this.createTrailWindowPanel = new CreateTrailFormPanel();
    this.createTrailWindow = new Ext.Window({
        title: 'Create Trail',
        closable: true,
        closeAction: 'hide',
        plain: true,
        items: [this.createTrailWindowPanel],
        id: 'createtrailwindow'
    });
}


this.createTrailWindowPanel.on('createTrail', this.getCreateTrailHandler(personalRouteId, trailSegment, combo), null, {single:true});

this.createTrailWindow.show();
};

TrailNamePresenter.prototype.getCreateTrailHandler = function(personalRouteId, trailSegment, currentTrailCombo) {
var thisPersonalRouteId = personalRouteId;
var thisPresenter = this;
var thisCurrentTrailCombo = currentTrailCombo;
var thisTrailSegment = trailSegment;
return function(newTrailName) {
    thisPresenter.mapEditorService.createPersonalTrail(newTrailName, thisPersonalRouteId, thisPresenter.getCreateTrailServiceHandler(thisCurrentTrailCombo, thisTrailSegment));
};
};

CreateTrailFormPanel = Ext.extend(Ext.form.FormPanel, {
initComponent: function() {
    Ext.apply(this, {
        id: 'createtrailpanel',
        width: 500,
        frame: true,
        bodyStyle: 'padding: 10px 10px 0 10px;',
        labelWidth: 50,
        defaults: {
            anchor: '95%',
            msgTarget: 'side'
        },
        items: [
            {
                id: 'crt_trailnamefield',
                xtype: 'textfield',
                fieldLabel: 'Trail Name'
            }
        ],
        buttons: [{
            text: 'Create',
            handler: this.getCreateClickHandler()
        },{
            text: 'Cancel',
            handler: function(b, e){
                Ext.getCmp('createtrailwindow').hide();
            }
        }]
    });

    this.addEvents('createTrail');

    CreateTrailFormPanel.superclass.initComponent.apply(this, new Array());

}   
});

CreateTrailFormPanel.prototype.getCreateClickHandler = function() {
var thisPanel = this;
return function() {
    var trailNameField = Ext.getCmp('crt_trailnamefield');
    alert('click');
    thisPanel.fireEvent('createTrail', trailNameField.getValue());
};
};

1 Ответ

0 голосов
/ 07 июня 2011

В ExtJS, когда у вас есть компоненты, которые будут принадлежать родителю.Я бы предложил использовать itemID, в противном случае возможность повторного использования компонента в вашем веб-приложении снижается, поскольку id действует аналогично одиночному.Также в действии у вас есть {single: true}, который удалит слушателя после первого запуска.Если вы удалите это, это может решить вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...