1

Emberルーティングとコントローラーについて質問があります。新しいルーターに慣れるために、小さなアプリを作成しました。そのため、クリックすると別の状態に移行するボタンを作成しました。

App.PostsView = Em.View.extend({
  click: function() {
    var router;
    this.get('controller').transitionTo('about');
  }
});

私の質問は今です:メソッドは何getを返しますか?。明らかにインスタンスですが、PostController一方ではコントローラーにtransitionTo()メソッドがなく、他方では意味がありません。

4

3 に答える 3

3

this.get('foo')Emberオブジェクトのプロパティを返します。ビューは「コントローラー」プロパティを持つことができるためthis.get('controller')、ビューのコントローラープロパティ(デフォルトではpostsController)にバインドされたコントローラーを返します。

this.get('controller').transitionTo()sly7_7で説明したようtransitionTo()に、コントローラーでも定義され、ルーターに委任されるため、機能します。注意してください、それはおそらく非推奨になるでしょう、そして1つは使うべきです

this.get('controller').transitionToRoute('about');

代わりは。

于 2013-01-23T17:51:48.697 に答える
2

ビューレベルでこれを行うべきではありません。これはルーターが設計されているため、ビューでクリックイベントをキャプチャする代わりに、ボタンにアクションを実装してルーターに処理させます。最初からベストプラクティスを学ぶことをお勧めします。アプリケーションが進化する可能性があり、トランザクションのコミット/ロールバックの処理、レコードの作成/更新など、より複雑な概念が必要になります。だからここにあなたへの私の提案があります

あなたの見解では

<button type="button" {{action onSaveClick}} />Save</button>

ルーターで

App.FooRoute = App.Route.extend({
    events: {
        onSaveClick: function() {
            this.transitionTo('bar');
        }
    }
})

スタイリングやアニメーションなど、その他の理由で、ビューでクリックイベントをキャプチャする必要がある場合は、イベントをキャプチャしてスタイリングを実行し、最後にコントローラーにイベントを送信することをお勧めします。その後、イベントはルーターで同じように処理できます

App.FooView = Ember.View.extend({
 click: function() {
   // Do some styling
   this.get('controller').send('onSaveClick')
 }
})

最後に、ベストプラクティスについて言えば、残り火で作業するときに、アプリケーションを相互作用する一連の状態として考えるようにしてください。コンセプトを正しく実装する必要があります。これを見てください

于 2013-01-23T18:26:30.330 に答える
1

コントローラにはtransitionToがあります:https ://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/ext/controller.js#L36 、基本的にターゲットに委任します(これはルーター)

于 2013-01-23T16:58:24.573 に答える