2013-03-02 51 views
2

我有一個關於在燼路由器中基於非id的動態段的問題。 我正在使用Ember.VERSION:1.0.0-rc.1如何在ember路由器中使用非id動態段?

我有一個嵌套資源,我需要在路徑中使用url參數而不是id。 但是對json api的ajax調用需要請求一個id。

所以在我的車把模板,我有:

{{#each thing in controller}} 
    {{#linkTo 'thing' thing.url}}{{thing.name}}{{/linkTo}} 
{{/each}} 

的東西路線是這樣的:

App.ThingsRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Thing.find(); 
    } 
}); 

和路由器:

App.Router.map(function() { 
    this.resource('things', function() { 
     this.resource('thing', {path:':thing_url'}); 
    }); 
}); 

如何將網址映射解決的事情ID?

回答

0

弗雷德是正確的。模型鉤子需要參數參數。這是一個更完整的例子。

App.ThingRoute = Ember.Route.extend({ 
    model: function(params) { 
    return App.Thing.find(params.thing_url); 
    } 
}); 
+2

因爲你不是通過id查找,而是通過其他字段查找,所以'find'行應該是:'返回App.Thing.find('url',params.thing_url);' – 2013-03-02 13:12:17

+0

也許我的問題還不夠清楚。與此資源相關的JSON端點正在使用id爲「thing」的實例提供服務。這意味着ember必須通過id向服務器發回請求,但是我想使用它的url參數來顯示'thing'。我已經下載了一個'東西'的集合,所以我的問題是我可以將'東西'的路線與該集合關聯起來以便通過ID進行查找?否則,服務器將返回404,因爲(例如)mydomain.com/things/thing_url路由不存在,但是mydomain.com/things/1。 – i0n 2013-03-02 13:36:52

+1

所以在這種情況下,您還需要實現序列化方法。並做一些類似於:'return {id:object.get('url')}'。 – ahawkins 2013-03-02 22:04:12

0

如果您已經加載的所有Thing當時的你可以用all方法來檢索所有現有的模型和findProperty方法,通過特定的屬性找到數組項:

App.ThingRoute = Ember.Route.extend({ 
    model: function(params) { 
     return App.Thing.all().findProperty('url', params.thing_url); 
    } 
}); 

注意,這將如果沒有加載模型,則不工作 - findProperty返回undefined如果model不在數組中,並且不會生成對服務器的請求。

相關問題