2015-06-02 2 views
0

У меня есть эта проблема с компонентом MessageBox в ExtJS 3.4, и я отчаянно ищу решение.ExtJS 3.4 Кнопки MessageBox YESNO странное поведение

function supprimerCatalogPreEnregFunction() { 
    Ext.Msg.show({ 
     msg: document.getElementById('confirmDeleteMessage').value, 
     buttons: Ext.Msg.YESNO, 
     icon: Ext.MessageBox.ERROR, 
     fn : function (btn) { 
      if (btn == 'yes') { 
       document.getElementById('deleteForm:deleteCatalogPreEnreg').onclick(); 
      } 
     } 
    }); 
} 

Проблема заключается в том, что мой БТН возвращаемое значение 1, а не «да» или «нет», как я ожидал. И это сводит меня с ума, потому что я пытаюсь найти множество решений, и я не понимаю, почему это происходит.

Эта функция является обработчиком для нового Ext.Button. Кнопка является частью новой кнопки Ext.Panel: [...].

Я не могу понять, почему кнопка имеет эту странную ценность, и это сильно меня разочаровывает. Может ли пропущенная запятая произвести такое поведение? Хотя, я не нашел недостающую запятую.

LE:

Я исследовал больше, и я более внимательно посмотрел на мой код и помог отладчик, я обнаружил, что моя функция function (btn){}

принимает в качестве аргументов в позиции 0: значение 1, на втором месте получает Window (мое текущее местоположение), а третий аргумент - тот, который должен был быть получен моим компонентом, и он выглядит как [«yes», «», Object {}] и т. д. И я думаю, что это это аргумент, в котором я нуждаюсь, где 0-я позиция - это значение моего btn, но я не знаю, откуда пришли другие аргументы, чтобы знать, что мне нужно сделать, чтобы заставить его работать.

Поскольку я все еще немного смущен, я расскажу об этом с общим объяснением того, как я реализовал этот обработчик.
Так, в Ext.onReady я загружаю функцию Init()
Тогда, в этой функции я сделал уаг = новый Кнопка удаления Ext.Button
Эта кнопка имеет обработчик, который моя начальная функция от вопрос
The Кнопка удаления добавляется новый Ext.Panel с кнопками: [Кнопка удаления, и т.д.]
Эта панель добавляется в качестве элемента к Ext.TabPanel
И, наконец, TabPanel добавляют к ViewPort ,

+0

Показать код, вызывающий эту функцию, трудно сказать из параграфа. Еще лучше, воспроизведите проблему в https://fiddle.sencha.com/#home. Кроме того, остановитесь в своем обработчике с помощью отладчика, чтобы понять, что происходит. –

ответ

0

Глядя на source, кажется, что первые пары кнопка нажато (Ext.Msg.YESNO, который может дать вам truthy результат), но второй параметр, передаваемый в текстовом значении вы ищете:

var handleButton = function(button){ 
    buttons[button].blur(); 
    if(dlg.isVisible()){ 
     dlg.hide(); 
     handleHide(); 
     //here the arguments are button, activeTextEl.dom.value and opt... so look at the second argument in your callback 
     Ext.callback(opt.fn, opt.scope||window, [button, activeTextEl.dom.value, opt], 1); 
    } 
}; 

I «d попробуйте изменить код:

function (btn, btnTxt) { 
    if (btnTxt == 'yes') { 
     document.getElementById('deleteForm:deleteCatalogPreEnreg').onclick(); 
    } 
} 
+0

Не мое решение, но большое спасибо! –

1

Documentation Сенча показывает реализацию, как:

// Prompt for user data and process the result using a callback: 
Ext.Msg.prompt('Name', 'Please enter your name:', function(btn, text){ 
    if (btn == 'ok'){ 
     // process text value and close... 
    } 
}); 

Выполнение следующего кода с помощью ExtJs 3.4:

Ext.onReady(function(){ 

    Ext.BLANK_IMAGE_URL = '/js/ext-3.4.0/resources/images/default/s.gif'; 

    Ext.Msg.show({ 
     msg: "test", 
     buttons: Ext.Msg.YESNO, 
     icon: Ext.MessageBox.ERROR, 
     fn : function (btn, text) { 
      if (btn == 'yes') { 
       console.log(btn, text); 
      } 
     } 
    }); 
}); 

Output (Firebug консоль):

да (пустая строка)

Так что ваш код должен работать. Я бы посмотрел, есть ли какие-либо глобальные переопределения, которые загружаются, и тестируйте их по отдельности

+0

Да, это работает как задокументировано. См. Https://fiddle.sencha.com/#fiddle/nso –

+0

Прежде всего, большое спасибо за ответы. Я искал больше, и я думаю, что это поведение связано с моей «архитектурой» в файле .js. Кроме того, я обновил вопрос новыми подсказками. Я не знаю, откуда идут эти аргументы. –

0

Прежде всего, большое спасибо за ответы.
Казалось, что проблема была в скрипте, что я включил его в мою страницу jsf.
И это испортило часть моего кода, и поэтому у моего компонента был странный bahviour.
Я решил это, удалив этот скрипт и позвольте функции, когда я разместил ее на начальном этапе.

Смежные вопросы