ExtJS 3.4 MessageBox按钮YESNO奇怪的行为

时间:2015-06-02 12:46:18

标签: javascript extjs messagebox extjs3

我在ExtJS 3.4中使用MessageBox组件时出现此问题,我正拼命寻找解决方案。

 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();
            }
        }
    });
}

问题是我的btn返回值1,而不是我所期望的'是'或'否'。它让我发疯,因为我尝试了很多解决方案而我无法理解为什么会这样。

此函数是新Ext.Button的处理程序。 该按钮是新Ext.Panel的一部分,按钮:[...]。

我无法理解为什么按钮具有那种奇怪的价值而且它让我很沮丧。 丢失的逗号可以产生这种行为吗?虽然,我没有找到一个丢失的逗号。

L.E:

我已经研究了更多,我在代码中更仔细地查看,并且在调试器的帮助下,我发现了我的功能     function (btn){}

接收位置0的参数:值1,第二个位置接收Window(我的当前位置),第三个参数是我的组件应该接收的参数,它看起来像[“是”,“ “,对象{}]等 我认为这是我需要的论点,其中第0位是我的btn的值,但我不知道其他参数来自哪里知道我需要做什么才能使它工作。

由于我仍然有点困惑,我将通过对我如何实现此处理程序的一般解释来更新此内容。
  所以,在Ext.onReady我加载一个函数init()
  然后,在这个函数中,我做了一个 var deleteButton = new Ext.Button
  这个按钮有一个处理程序,这是我的问题
的初始功能   使用按钮将 deleteButton添加到新的Ext.Panel:[deleteButton等]
  此面板作为项目添加到 Ext.TabPanel
  最后,TabPanel被添加到ViewPort中。

3 个答案:

答案 0 :(得分:1)

Sencha 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);
            }
        }
    });
});

输出(Firebug控制台):

  

是(空字符串)

所以你的代码应该正常工作。我会检查是否有任何全局覆盖被加载并单独测试

答案 1 :(得分:0)

查看source似乎第一个参数是点击的按钮(Ext.Msg.YESNO,它可能会给你一个真实的结果),但传递的第二个参数是你要查找的文本值:< / p>

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);
    }
};

我会尝试将您的代码更改为:

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

答案 2 :(得分:0)

首先,非常感谢您的回复 似乎问题来自于我在jsf页面中包含它的脚本 这搞砸了我的部分代码,这就是为什么我的组件有一个奇怪的行为 我解决了这个问题,删除了那个脚本并让我最初发布它的功能。