2011-12-20 42 views
10

對正確的程序或至少使用sproutcore-routing的常用程序感到好奇。使用sproutcore-routing的正確程序

在讀我有它顯示路由這個基本的例子:

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

我假設,在大多數情況下MyApp.route會調用提供控制器所提供的行動。我的問題是,除了這一步之外,更多關於如何處理您有很多主要視圖的應用程序的設置/拆卸內容。

當控制器更改爲總是以乾淨的數據和視圖開始時,人們是否實例化新的控制器?或者更常見/明智的做法是在加載時實例化所有控制器等,並簡單地使用路由來顯示/隱藏主視圖?

我想當同一個問題在控制器內的動作之間跳動時。是否適當做一些拆解,特別是綁定/聽衆,然後重新建立它們,如果行動被召回?

我的問題可能有點模糊,但我基本上想知道人們如何處理大量的主要視圖,並處理清理,所以東西不會過時或咀嚼大量的資源。

回答

2

在我看到的大多數Ember和Sproutcore應用程序和示例中,控制器都是在應用程序初始化時實例化的。路由驅動狀態圖中的狀態變化,其中控制器被更新並且視圖根據需要被創建/銷燬。

2

我有以下設置。

在我Ember.Application.create()我有以下代碼:

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'); 

然後,當我點擊事情,應該引起URL改變我做的事:

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

您的應用現在應該正在監聽URL中的更改,並根據URL部分引發正確的操作。

你也許可以移動MyApp.MyController.findItemWithId(routeParams.id);到狀態圖的輸入()函數(如果你正在使用它們),但你需要在一些地方保存該ID在一些控制器。

相關問題