自定义解析器,用于解析/ posts / create route的模型

时间:2014-01-27 15:34:11

标签: ember.js routes

我正在尝试使用解析器系统来解析/ posts / create的模型。

我的路由器映射如下:

this.resource('posts', function () {
    this.route('create', {
      path: '/create'
     });

    this.route('index', {
      path: '/:post_id'
    });
  });

当我转到/ posts / 1234路线时,我会调用解析器上的resolveModel方法,但是当我转到/ posts / create时,它不是。我假设我在这里缺少一个命名约定,但我想得到/ posts / create使用解析器而不是创建一个PostsCreateRoute只是为了在模型钩子中有一个衬垫。

任何帮助将不胜感激。我很想知道我是否也接近这个错误。谢谢!

1 个答案:

答案 0 :(得分:2)

在第一个路由中调用

resolveModel因为ember对包含使用约定:model_id的路径参数的路由有特殊约定。当ember看到它时,它将尝试使用路径参数的id找到模型的实例。您可以在此处https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/system/route.js#L871-L888看到此行为。

第二条路线没有路径参数,因此ember的默认行为是什么都不做。如果要在用户输入该URL时创建帖子模型的新实例,则需要声明自己的模型函数来执行此操作。例如:

App.PostCreateRoute = Ember.Route.extend({
  model: function() {
    return this.store.createRecord('post', {});
  }
});