2011-12-20 4 views
10

を。私はほとんどの場合、MyApp.routeが供給コントローラに供給し、アクションを呼び出すだろうと仮定していsproutcoreルーティング<a href="https://github.com/emberjs-addons/sproutcore-routing">sproutcore-routing</a>を使用するための適切な手順興味、または少なくとも一般的手順

SC.routes.add(':controller/:action/:id', MyApp, MyApp.route); 

:それはルーティングのために、この基本的な例を示しているが、私を読んで

。私の質問は、このステップを超えて、多くの主要なビューを持つアプリケーションのセットアップ/ティアダウンの処理方法についてです。常にデータとビューの白紙の状態で開始するよう

は、コントローラの変更新しいコントローラをインスタンス化する人いますか?または、ロード時にすべてのコントローラなどをインスタンス化して、ルーティングを使用してプライマリビューを表示/非表示にすることは、より一般的です。

私は、コントローラ内のアクション間でバウンス時に同じ質問が行くとします。特にビンディングやリスナーでのティアダウンを行い、リコールされた場合は再設定するのが適切ですか?

私の質問は少しあいまいかもしれませんが、私は基本的に、人々は主のビューの多くを処理する方法を思ったんだけど、とスタッフが古い取得またはリソースの多くをかむしないようにクリーンアップを扱います。私が見た中で最もエンバーとSproutcoreアプリと例で

答えて

2

は、コントローラは、アプリケーションの初期化時にインスタンス化されています。ルートは、コントローラが更新され、必要に応じてビューが作成/破棄されるステートチャートの状態変化を駆動します。

2

次の設定があります。私Ember.Application.createで

()私は、次のコードを持っている:私はURLは私がやる変化させる必要があり、物事をクリックすると、その後

MyApp.routes = Em.Object.create({ 
     currentRoute: null, 

     gotoRoute: function(routeParams) { 
      console.log('MyApp.routes gotoRoute. type: ' + routeParams.type + ' action: ' + routeParams.action + " id: " + routeParams.id); 
      if (routeParams.type === 'expectedType' && routeParams.action === 'expectedAction' && routeParams.id) { 
       //find item with ID and load in controller 
       MyApp.MyController.findItemWithId(routeParams.id); 
       //Navigate to the correct state 
       MyApp.stateManager.goToState('stateName'); 
      } 
     } 
    }) 

    SC.routes.add(":action/:type/:id", MyApp.routes, 'gotoRoute'); 

を:

SC.routes.set("location", "show/item/ID-123-123"); 

あなたのアプリはURLの変更を聞いているので、URL部分に基づいて正しいアクションが起こるはずです。

おそらくMyApp.MyController.findItemWithId(routeParams.id)を移動することができます。ステートチャートのenter()関数(使用している場合)に移動しますが、そのIDをコントローラのどこかに格納する必要があります。

関連する問題