3

膨大な量のアプリケーションがあり、それらすべてがいくつかの部分(データ/バックエンド/フロントエンド)を共有しています。ユーザーは1つ以上のアプリケーションにアクセスできる場合があり、現在、ユーザーはそれらを1つずつロードする必要があります。お客様はこれを好まないため、クライアント自体がロードするモジュールを解決する1つの巨大なアプリケーションにすべてをリファクタリングしています。最初のテストは良さそうに見えました。カスタムモジュールビルダーツールにより、読み込み時間は1分です。

今、私は新しいExt.app.EventDomainものに出くわし、それをリファクタリングに実装する必要があるかどうか疑問に思いました。1つのトリッキーな部分はイベントです。また、テーブルでルーティングを使用することも検討しています。しかし、この議論はまだ続いています。

では、使用する必要があります。使用するExt.app.EventDomain場合は、どのように使用するのでしょうか。それとも、カスタムルーティングを使用するほうがよいのでしょうか。

つまり、Sencha Touchはルーティングを使用していますが、EventBusは使用していません。また、Sencha Touchはパフォーマンスが重要であるため、ここで両方のフレームワークが異なる理由があるようです。

4

1 に答える 1

9

Ext.app.EventDomainそれ自体を使用することを意図したものではありません。むしろ、必要に応じてカスタムイベントドメインを実装できます。イベントドメインの背後にある考え方は非常に単純です。これは、Ext.Componentから派生したものではないアプリケーションパーツ間でイベントを渡す方法です。

最も頻繁に使用されるのはコントローラーバインディングです。4.1では、他のコントローラーのメソッドを直接呼び出すことしかできませんでした(ハードバインディング)。これはテストには非常に適していません。4.2では、代わりにコントローラーに他のコントローラーのイベントをリッスンさせ(ソフトバインディング)、次の代わりに明確なロジック分離を行うことができます。

Ext.define('MyApp.controller.Foo', {
    extend: 'Ext.app.Controller',

    doSomething: function() {
        this.getController('Bar').doSomethingElse();
    }
});

Ext.define('MyApp.controller.Bar', {
    extend: 'Ext.app.Controller',

    doSomethingElse: function() {
        // The problem here is that this logic belongs to Bar controller
        // but this method has to be called from Foo controller,
        // which means Bar should always be around whenever Foo
        // needs to call it. Race conditions, anyone?
        ...
    }
});

できるよ:

Ext.define('MyApp.controller.Foo', {
    extend: 'Ext.app.Controller',

    doSomething: function() {
        this.fireEvent('doSomethingElse');
    }
});

Ext.define('MyApp.controller.Bar', {
    extend: 'Ext.app.Controller',

    init: function() {
        this.listen({
            controller: {
                '*': {        // '*' means any controller
                    doSomethingElse: this.doSomethingElse
                }
            }
        });
    },

    doSomethingElse: function() {
        // Not a problem anymore -- Foo fires an event, and if Bar
        // happens to be around, it reacts and does whatever it wants;
        // the benefit is that there is no direct method calling
        // so we don't have to watch for exceptions and do other
        // unnecessary stuff.
        ...
    }
});

独自のイベントを聞くこともできます。これは、おそらく本番環境で使用するものではありませんが、コントローラーユニットテストに非常にうまく使用できる優れた副作用です。

他のコントローラーのイベントに加えて、コントローラーはストア、ダイレクトプロバイダー、およびグローバルイベントをリッスンできるようになりました。これは時々役立つ場合があります。

4.2がリリースされたら、これについて書き留める予定です。これがそれまで少し役立つことを願っています。

于 2013-03-12T22:49:02.687 に答える