2014-01-06 24 views
1

在ember js中,我想知道在模型鉤子中通常使用的路由參數的常用方法是什麼?通常在Ember中使用路由參數

有時我發現我需要訪問控制器內的其中一個參數;假設由於某個動作或某事而發出ajax請求。現在通常你會在模型鉤子中返回一個模型,該模型通常也有id。但我有些情況下我不需要獲取模型,只需要價值。在這種情況下,我可以返回一個對象或值作爲「模型」,但看起來有點奇怪。有沒有辦法只是直接在控制器中訪問參數,而不是傳遞值?你可以從控制器訪問當前路由數據嗎?

另一件事;我有一條路線需要兩個動態細分。所以我用一條路線創建一個資源。現在在我的路線中,我需要訪問這兩個參數。我是否必須通過模型鉤子來傳遞它們?然後在子控制器中,我必須使用「需要」來訪問父控制器的內容?它似乎有點太多的解決方法,它使事情變得非常混亂和不清楚

要添加到此...如果我通過某些數據傳遞到類似transitionToRoute的路線,它會跳過路線上的模型方法。但是那時你不再能夠訪問路線的參數。是否期望您在setupController中的模型上調用序列化方法來確定您的參數?

回答

1

您必須使用查詢參數,這些查詢參數在此時只能在金絲雀版本中激活。

主題的參考可以在這裏找到:

https://github.com/emberjs/ember.js/pull/3182

的一般方式做到這一點是這樣的:

App.Router.map(function() { 
    this.resource('posts', {queryParams: ['sort', 'direction']}, function() { 
    this.resource('post', {path: "/:id", queryParams: ['showDetails']}); 
    }); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    beforeModel:  function(transition, queryParams) {}, 
    model:   function(params, transition, queryParams) {}, 
    afterModel:  function(resolvedModel, transition, queryParams) {}, 
    setupController: function(controller, context, queryParams) {}, 
    renderTemplate: function(controller, context, queryParams) {} 
}); 

/// transitionTo now will accept a final argument, which must be an object with the key queryParams. 

this.transitionTo('post', object, {queryParams: {showDetails: true}}); 
this.transitionTo('posts', {queryParams: {sort: 'title'}}); 
this.transitionTo({queryParams: {direction: 'asc'}}); 

/// You can also use add query params to URL transitions as you would expect: 

this.transitionTo("/posts/1?sort=date&showDetails=true"); 
+1

這是關於queryParams,但我說的params參數就像你傳遞給你的IndexRoute中的模型方法一樣。也許這是我的一個誤解,但是這是如何針對我的問題的?我的問題是基於動態細分市場 – Arch

+1

這可能有幫助。 https://github.com/emberjs/ember.js/issues/1997 – borisrorsvort

+0

酷,我會看看 – Arch