如何在ember路由器中使用非id动态段?

时间:2013-03-02 05:14:02

标签: ember.js ember-router

我对ember路由器中基于非id的动态段有疑问。 我使用的是Ember.VERSION:1.0.0-rc.1

我有一个嵌套资源,我需要在路径中使用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?

3 个答案:

答案 0 :(得分:0)

弗雷德是对的。模型钩子采用了参数。这是一个更完整的例子。

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

答案 1 :(得分:0)

如果您已经加载了所有Thing,则可以使用all方法检索所有现有模型,并使用findProperty方法按特定属性查找数组项:

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

请注意,如果未加载必需的模型,则此操作无效 - 如果model不在数组中,findProperty将返回undefined,并且不会生成对服务器的请求。

答案 2 :(得分:-1)

模型方法有一个传递的参数,在这种情况下将是thing.url,因此你可以在那里访问它。

在此处阅读动态模型部分 http://emberjs.com/guides/routing/specifying-a-routes-model/