ExtJS 4 の新機能は、Model-View-Controller アーキテクチャです。しかし、ExtJs4 の例はいくつかの単純化されたケース向けに作成されているため、そのイデオロギーに違反しています。
MVC JavaScript ファイル (コントローラー、ビュー、モデル、ストア) の標準的な階層を作成しました。ビューファイルには、ある時点でボタンがあります。
オンラインで例を確認すると、通常は次のようなコードです。
items: [
{
xtype: 'button',
styleHtmlContent: true,
text: 'Upload image',
flex: 1,
formBind: false,
handler: function() {...}
...
}]
そのため、ExtJS4 の例でさえ、実行可能部分をフォーム定義内に配置することを「提案」しています。MVC では、すべてのアクションがコントローラーの JavaScript ファイルに存在する必要があります。
もう 1 つの問題は、テーブルのアクション列です。以下は、標準テーブル構成での列の定義です。
xtype: 'actioncolumn',
width: 50,
fixed: true,
altText: 'Actions',
items: [
{
icon: '/delete.png',
tooltip: 'Delete',
handler:function (grid, rowIndex,colIndex){
...}
問題は、ここでハンドラーがいくつかのグリッド固有のパラメーターを受け入れることです!
念のために言っておきますが、extjs 4 では、コントローラ ファイルの正規の例は次のようなものです。
Ext.define('MyApp.controller.mainController', {
extend: 'Ext.app.Controller',
onButtonClick: function(button, e, options) {
// alert("Button has been clicked "+button);
// TODO which button?
},
init: function() {
this.control({
"button": {
click: this.onButtonClick
}
});
}
});
私の質問は、コードを次のように再配置する方法です: 1. 画面上の任意のボタンから handler: ディレクティブを削除する 2. コントローラー ファイル内のボタンにアクションをアタッチします。3. actioncolumn テーブルの列に対して同じことを行い、どの行と列でどのアクションがトリガーされたかを正しく認識します (つまり、関数呼び出しを「ハンドラー」からコントローラー ファイルに完全に転送します)。
前もってありがとう、アスカー