我正试图全神贯注于 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
被视为嵌套)。
当您导航到 PostsRoute
时,PostsRoute
的 model
钩子(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/