Ext JS 5 パブリックベータ発表

Ext JS 5 のパブリックベータが発表になりました。

楽しみです。今回は Ext JS 4 からの後方互換性がかなり意識してリリースされているので、 Ext JS 3 から 4 へのドラスティックな変化のようなことはなさそうです。

しかし、エンジニアとして注目したい機能が沢山詰まっています。 これは楽しみです。

今日は、その中でもイベントのことについて触れましょう。 Ext JS 3 の頃から、コンポーネントのイベントにリスナーを設定する事はできました。

  • listners コンフィグで
[js] listeners: { click: function(button) { // Some Code } } [/js]
  • on メソッドで
[js] button.on(‘click’, function(){ // Some code }); [/js]

Ext JS 4 の時に MVC が導入され、Controller の中でビューにイベントリスナーをセットできるようになりました。

[js] this.control({ ‘view button[action=save]’: { click: this.onSave } }); [/js]

コントローラーからビューを参照するために、refs コンフィグもできました。

[js] refs: [{ ref: ‘saveButton’, selector: ‘button[action=save]’ }] [/js]

これで、コントローラーに getSaveButton というゲッターメソッドができます。

Ext JS 5 からは ViewController というのが追加されました。 ViewController は、ビューに強くバインドしたコントローラーです。 ビューとの連携が強いので、refsやcontrolの定義なしで、参照やリスナーのセットができます。 これを使うと、ビューの方で次の様なコンフィグを設定します。

[js] items: [{ xtype: ‘textfield’, reference: ‘nameField’ },{ xtype: ‘button’, text: ‘Save’, listeners: { click: ‘onClickSave’ } }] [/js]

最初のアイテムには、reference というコンフィグがついています。 二つ目のアイテムの listeners の関数オブジェクトをセットするべき所に ‘onClickSave’ という文字列がセットされています。 こうしておくと ViewController で

[js] onClickSave: function() { var me = this, name = me.getNameField.getValue(); me.setData(name); } [/js]

こんな風に書くことができます。 refs や control の設定をView側で書く感じですね。 これまで、refs や control の定義は少々面倒くさいなぁと思っていたところもありましたが、 これを使うとコーディング量も少ないし、しかもわかりやすい。

僕はコントローラーが、ビューの構造に依存しすぎるのを懸念していました。 例えば、

[js] this.control({ ‘myview firstpanel button[action=save]’: { click: this.onSave } }); [/js]

こんな風にコンポーネントクエリを書いていたら、ビューの構造が変わったらこのリスナーは呼ばれなくなります。 ですから、ビューの方で

[js] items: [{ xtype: ‘button’, handler: function(b) { var view = b.up(‘myview’); view.fireEvent(‘save-click’, view); } }] [/js]

というように、カスタムイベントを発火して、コントローラーでは

[js] this.control({ ‘myview’: { ‘save-click’: this.onSave } }); [/js]

と、カスタムイベントにリスナーをセットするということをやっていました。 これで、ビューの構造をコントローラーは知る必要がなくなります。

が、ViewContoller を使えば、こういう必要もありません。

とても、便利ですね。

Ext JS 5 には他にも紹介したい機能がいっぱいあります。 時間を見つけて、いくつかの昨日について紹介したいと思っています。

2 thoughts on “Ext JS 5 パブリックベータ発表

コメントは停止中です。