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)

これに関する私の問題は次のとおりです。

リスナー部分がなければ、入力フィールドを選択することはまったく不可能であり、ウィンドウの移動をトリガーするだけです。リスナーの実装では、何らかの理由で入力フィールドの内容がまだ選択されています (selectText が 0 から 0 にならない場合)。また、マウスを使用してコンテンツの一部を選択することはできません。これは、ドラッグがウィンドウ全体に適用されるためです。また、リスナー実装の「クリック」もおそらくそのアプローチを台無しにします。また、マウスクリックでカーソルを特定の場所に移動することもできません。

では、ウィンドウ タイトルを置き換える使用可能な 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 に答える