0

Ext.window.Window を拡張するクラスを作成しました。これにより、基本的にユーザーは最小限の長さ制限でテキストを入力できます。その条件が満たされているかどうかを確認し、送信ボタンのロックを解除します。そのボタンがクリックされた後、カスタム イベントが発生します。

私のコードは正常に動作しますが、正しく記述されているかどうか疑問に思っていました。正しくは、機能するという意味ではなく、Sencha のルールを最適化し、満たすという意味です。

すべてのコメントと提案に感謝します。

だからここに私のコードがあります:

Ext.define("Urlopy.Components.ReasonWindow", {
        extend : 'Ext.window.Window',
        modal : true,
        width : 400,
        height : 200,
        minWidth : 400,
        minHeight : 200,
        layout : 'fit',
        initComponent : function() {
            this.addEvents('addHistoryEntry');
            this.title = 'Powód odrzucenia'
            var minimum = 20;//message minimum length
            this.form = Ext.create('Ext.form.Panel', {
                        border : false,
                        bodyPadding : 10,
                        items : [{
                                    xtype : 'textarea',
                                    id : 'myreason',
                                    allowBlank: false,
                                    minLength: minimum,
                                    hideLabel : true,
                                    enableKeyEvents: true,
                                    name : 'reason',
                                    anchor : '100% 100%',
                                    listeners: {
                                        'keypress': {
                                        fn: function(t){
                                            var v = t.getValue(), cc = v.length ? v.length : 0;
                                            if(cc>=minimum)
                                            {
                                                Ext.fly(charCount.getEl()).update('Można wysłać');
                                                sendButton.enable();
                                            } else
                                            {
                                                Ext.fly(charCount.getEl()).update('Pozostało znaków:'+(minimum-cc));
                                                sendButton.disable();
                                            }
                                        },
                                        buffer: 1
                                        }
                                    }
                                }]
                    });

            this.items = this.form;
            var sendButton = Ext.create("Ext.button.Button", {
                        text : 'Wyślij',
                        disabled : true,
                        icon : 'resources/diagona-icons/icons/16/103.png',
                        scope : this,
                        handler : function() {
                            this.fireEvent("addHistoryEntry",Ext.getCmp('myreason').getValue());
                            this.close();
                        }
                    });

            var charCount = Ext.create('Ext.toolbar.TextItem', {text: 'Pozostało: ' + minimum}); 

            this.dockedItems = [{
                        xtype : 'toolbar',
                        dock : 'bottom',
                        ui : 'footer',
                        defaults : {
                            minWidth : 100
                        },
                        //pack : 'start',
                        items : [charCount, '->', sendButton]
                    }];
            this.callParent();
        }
    });

編集

パラメータをウィンドウに渡すにはどうすればよいですか? 今、私はこれを正しくやっています:

var j = Ext.create("Urlopy.Components.ReasonWindow");
j.rec=rec;//j.setRecord(rec); or by adding custom function
j.on("addHistoryEntry", function(reason, rec) {
    console.log(reason);
    console.log(rec.get('Name'));
});
j.show();

Ext.create を呼び出すときに、どうにかしてインラインで渡すことはできますか??

4

1 に答える 1

1
var j = Ext.create("Urlopy.Components.ReasonWindow", {
    rec : rec,
    param2 : param2Value
});

j.on("addHistoryEntry", function(reason, rec) {
    console.log(reason);
    console.log(rec.get('Name'));
});

j.show():

上記のパラメータを渡す方法を見ることができます。かなり簡単です。

ハッピーコーディング。

于 2012-08-16T09:54:26.667 に答える