1

我需要将窗口的普通标题部分更改为暂时可编辑。我尝试了以下方法,但它似乎在几个方面都失败了。有人可以建议我更好的方法吗?

    var header = window.getHeader();
    header.setTitle(''); // Get rid of the original for now
    var field = Ext.create('Ext.form.field.Text', {
        name: 'Title',
        allowBlank: false,
        cls: 'myInput',,
        value: 'Meh, just some text for now',
        listeners : {
            el : {
                delegate : 'input',
                click    : function() {
                    field.focus(false); // Focus but do not select the text
                    field.selectText(0,0); // The previous failed, try to deselect like this
                }
            }
        }
    });
    header.insert(0, field); // First, before the tools (several buttons there)

我的问题如下;

如果没有侦听器部分,根本不可能选择输入字段,所发生的一切都是触发窗口的移动。尽管由于某种原因仍然选择了输入字段的内容(没有从 0 到 0 的 selectText),但使用侦听器实现。同样不可能使用鼠标选择部分内容,因为拖动仍然适用于整个窗口,并且侦听器实现的“单击”也可能会破坏该方法。使用鼠标单击也无法将光标移动到特定位置。

那么,应该如何真正实现一个替换窗口标题的可用 html 输入字段呢?

4

1 回答 1

1

我尝试了以下似乎可行的策略:当鼠标光标进入输入字段时,禁用窗口拖放,并在离开时恢复它。

这是您的代码所提供的内容:

var killDrag = true;

// Found this by looking into the code: window.dd is an Ext.util.ComponentDragger
// Someone had the good idea to comment that, in there...
window.dd.on({
    // Ext.util.ComponentDragger has a beforedragstart event that can cancel the drag.
    // Apparently no one had the good idea to mention this event in the API doc.
    beforedragstart: function(dd, e) {
        if (killDrag) {
            return false;
        }
    }
});

var header = window.getHeader();
header.setTitle(''); // Get rid of the original for now
var field = Ext.create('Ext.form.field.Text', {
    name: 'Title',
    allowBlank: false,
    cls: 'myInput',
    value: 'Meh, just some text for now',
    listeners : {
        el : {
            delegate : 'input',
            mouseout: function() {
                killDrag = false;
            },
            mouseenter: function() {
                killDrag = true;
            }
        }
    }
});
header.insert(0, field); // First, before the tools (several buttons there)
于 2013-06-05T21:47:04.943 回答