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 を呼び出すときに、どうにかしてインラインで渡すことはできますか??