javascript - 正确的 Ember.js 资源路由声明

标签 javascript ruby-on-rails ember.js ember-data

我正试图全神贯注于 Ember 资源,但我碰壁了。查看像 Rails + Ember.js 这样的指南我看到声明资源路由的首选方式是:

EmberTester.Router.map(function() {
  this.resource('posts', function() {
    this.resource('post', { path: ':post_id' });
  });
}); 

这看起来很复杂,必须创建一个嵌套资源来访问各个项目。但除了风格元素之外,真正的问题是行为:从我在服务器端日志和客户端浏览器流量监控中看到的这样一条路线评估了“帖子”路线和“帖子”的模型 Hook ' 路线。也就是说,给定模型 Hook :

EmberTester.PostsRoute = Ember.Route.extend({
  model: function() {
    return EmberTester.Post.find();
  }
});

EmberTester.PostRoute = Ember.Route.extend({
  model: function(params) {
    return EmberTester.Post.find(params.post_id);
  }
});

当访问 url /posts/1 时,两个 模型钩子(Hook)都会被执行,所以服务器首先被要求提供所有帖子,然后是 post_id:1。我一定是错过了显而易见的东西,但我无法确定它是什么。

有没有更简单的方法来在 Ember 中声明资源?我是否应该声明资源而是使用普通路由?

最佳答案

我创建了一个 jsbin重现您正在谈论的问题并稍微更改 router 代码:

App.Router.map(function () {
  this.resource('posts');
  this.resource('post', { path: '/posts/:post_id' }); 
});

它做的事情与嵌套路由完全相同(我认为,在引擎盖下 post 被视为嵌套)。

当您导航到 PostsRou​​te 时,PostsRou​​temodel 钩子(Hook)被触发。如果您点击特定的帖子,PostRoute model Hook 将不会被触发。

但是,如果您转到特定帖子并刷新页面,您会注意到这次 PostRoute model 钩子(Hook)被触发了。

您应该将 treat 名词用作 resources(post、post、orders 等),将动词(形容词)用作 routes(new、show、edit 等) .

希望这对您有所帮助。

关于javascript - 正确的 Ember.js 资源路由声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16824195/

相关文章:

javascript - 是否可以强制 JavaScript 在使用前声明变量?

ruby-on-rails - 使用 Rspec 测试存在和所属关系

ruby-on-rails - Rails xml-builder 自定义命名空间删除空格

javascript - 实现自定义 ember-simple-auth 身份验证器

Javascript:通过基准测试获得 PC 的每秒操作能力

javascript - 通过添加/删除事件监听器来打开/关闭文档触摸移动

javascript - 电话号码验证正则表达式由一个加号开始和前面的数字组成

ruby-on-rails - Rspec 未在 Rails 4 beta 中生成 *_spec.rb 文件

javascript - 将参数从 Ember Handlebars 操作传递到 Controller

ember.js - Ember.js 支持哪些事件?