extjs消息显示组合框

时间:2012-03-24 09:04:33

标签: javascript extjs4

我使用extjs 4

Ext.Msg.show({
 title:    'test title',
         
 msg:      'test msg',
        
 buttons:  Ext.MessageBox.OKCANCEL,
});

如何将组合框添加到msg? 感谢

4 个答案:

答案 0 :(得分:3)

这是另一种方法。这有点硬编码,但应该有用。

Ext.MessageBox.show({
    title: 'Verification',
    msg: 'Please approve by checking the box below.<br /><br /><select id="approval"><option value="1">approved</option><option value="2">denied</option><option value="3">unsure</option></select>',
    buttons: Ext.MessageBox.OKCANCEL,
    fn: function (btn) {
        if (btn == 'ok') {
            if (Ext.get('approval').getValue() == "1") {
                Ext.MessageBox.alert('Result', 'approved');
            else if (Ext.get('approval').getValue() == "2") {
                Ext.MessageBox.alert('Result', 'denied');
            else if (Ext.get('approval').getValue() == "3") {
                Ext.MessageBox.alert('Result', 'unsure');
            }
        }
    }
});

答案 1 :(得分:0)

Ext.Msg只是一个小小的消息窗口,所以除了带有一些按钮的简单文本之外,它不支持组合或任何其他组件。

Window组件可以更准确地满足您的需求(http://docs.sencha.com/ext-js/4-0/#!/api/Ext.window.Window)。

答案 2 :(得分:0)

Ext.MessageBox是一个单例,所以你可以使用下面的方法直接覆盖它的方法,这个方法适用于ExtJS 3.2.1,不确定它是否适用于ExtJS 4

Ext.MessageBox.show = function () {
    if (this.inputField) this.inputField.destroy(); //destroy inputField created from previous call
        if(this.isVisible()){
                this.hide();
            }
            opt = options;
            var d = this.getDialog(opt.title || " ");

            d.setTitle(opt.title || " ");
            var allowClose = (opt.closable !== false && opt.progress !== true && opt.wait !== true);
            d.tools.close.setDisplayed(allowClose);
            activeTextEl = textboxEl;
            opt.prompt = opt.prompt || (opt.multiline ? true : false) || (opt.inputField ? true : false);
            if(opt.prompt){
                if(opt.multiline){
                    textboxEl.hide();
                    textareaEl.show();
                    textareaEl.setHeight(Ext.isNumber(opt.multiline) ? opt.multiline : this.defaultTextHeight);
                    activeTextEl = textareaEl;
                }else if(opt.inputField){
                    textboxEl.hide();
                    textareaEl.hide();
                    this.inputField = opt.inputField;
                    this.inputField.render(bodyEl);
                    activeTextEl = this.inputField;
                    activeTextEl.dom = {};
                        activeTextEl.on('select', function(cb) {
                             activeTextEl.dom.value = cb.getValue();
                    });
                }else{
                    textboxEl.show();
                    textareaEl.hide();
                }
            }else{
                textboxEl.hide();
                textareaEl.hide();
            }
            activeTextEl.dom.value = opt.value || "";
            if(opt.prompt){
                d.focusEl = activeTextEl;
            }else{
                var bs = opt.buttons;
                var db = null;
                if(bs && bs.ok){
                    db = buttons["ok"];
                }else if(bs && bs.yes){
                    db = buttons["yes"];
                }
                if (db){
                    d.focusEl = db;
                }
            }
            if(opt.iconCls){
                d.setIconClass(opt.iconCls);
            }
            this.setIcon(Ext.isDefined(opt.icon) ? opt.icon : bufferIcon);
            bwidth = updateButtons(opt.buttons);
            progressBar.setVisible(opt.progress === true || opt.wait === true);
            this.updateProgress(0, opt.progressText);
            this.updateText(opt.msg);
            if(opt.cls){
                d.el.addClass(opt.cls);
            }
            d.proxyDrag = opt.proxyDrag === true;
            d.modal = opt.modal !== false;
            d.mask = opt.modal !== false ? mask : false;
            if(!d.isVisible()){
                // force it to the end of the z-index stack so it gets a cursor in FF
                document.body.appendChild(dlg.el.dom);
                d.setAnimateTarget(opt.animEl);
                //workaround for window internally enabling keymap in afterShow
                d.on('show', function(){
                    if(allowClose === true){
                        d.keyMap.enable();
                    }else{
                        d.keyMap.disable();
                    }
                }, this, {single:true});
                d.show(opt.animEl);
            }
            if(opt.wait === true){
                progressBar.wait(opt.waitConfig);
            }
            return this;               
};

Ext.MessageBox.show({
    title: 'Choose',
    msg: 'Which one?',
    value: 'choice 2',
    buttons: Ext.MessageBox.OKCANCEL,
    inputField: new Ext.ComboBox(
    {
        typeAhead: true,
        displayField: 'choice',
        store: store,
        mode: 'local',
        triggerAction: 'all',
        forceSelection: true
    }),
    fn: function(buttonId, text) {
        if (buttonId == 'ok')
            Ext.Msg.alert('Your Choice', 'You chose: "' + text + '".');
    }
});

<强>参考:

http://www.sencha.com/forum/showthread.php?104375-Ext.MessageBox-prompt-with-ComboBox-DateField-or-any-input-field

答案 3 :(得分:0)

这是一种从Ext.Msg中删除标准文本字段然后添加自定义组件的技术。

Ext.define('ComboBoxPrompt', {
        extend: 'Ext.window.MessageBox',

        initComponent: function () {
                this.callParent();
                var index = this.promptContainer.items.indexOf(this.textField);
                this.promptContainer.remove(this.textField);  // remove standard prompt
                this.textField = this._createComboBoxField();
                this.promptContainer.insert(index, this.textField);
        },

        _createComboBoxField: function () {
                //copy paste what is being done in the initComonent to create the combobox
                return Ext.create('Ext.form.field.ComboBox', {

                        id: this.id + '-combo',

                        typeAhead: true,
                        displayField: 'value',
                        valueField: 'id',
                        store: someStore,
                        mode: 'remote',  // local
                        triggerAction: 'all',
                        forceSelection: true,

                        autoSelect: false,
                        hideTrigger: true,
                        minChars: 1,

                        enableKeyEvents: true,

                        listeners: {
                                change: function (obj, newValue, oldValue, eOpts) {
                                        //someStore.proxy.extraParams.keyword = newValue;
                                        //someStore.load();
                                }
                        }  // listeners





                });
        }
});



var msgbox = Ext.create('ComboBoxPrompt').prompt('New Record', 'Object Name',
        function (btn, text) {
                if (btn == 'ok') {
                        Ext.MessageBox.alert('Result', text);
                }
        })