我一直在使用带有单个动态段的 Ember 路由器(v1.0.pre),并且对它非常满意。
这么多魔法。
但是,我正在为多个动态细分而苦苦挣扎:
- 应该
serialize()
/deserialize()
返回什么? transitionTo()
那里的电话和上下文应该如何?
有人可以对此有所了解吗?
我一直在使用带有单个动态段的 Ember 路由器(v1.0.pre),并且对它非常满意。
这么多魔法。
但是,我正在为多个动态细分而苦苦挣扎:
serialize()
/deserialize()
返回什么?transitionTo()
那里的电话和上下文应该如何?有人可以对此有所了解吗?
serialize
并且deserialize
只应在您的上下文对象具有自定义序列化(即不是 ember-data 模型实例)时实现。因此,您不必在使用完整的 ember 堆栈时实现这些方法。
transitionTo
应该从路由事件处理程序中调用,并且上下文传递如下:
showPost: function (router, event) {
var post = event.context;
router.transitionTo('posts.show', post);
}
鉴于该showPost
事件已由action
这样的助手触发:
{{#each post in controller}}
<a {{action showPost post}}>Show post {{post.title}}</a>
{{/each}}
通过几个上下文对象(对于深度嵌套的路由)可以实现更复杂的转换:
router.transitionTo('posts.member.comments.show', post, comment);
post
&comment
上下文将传递给适当的路由,而路由将下降到嵌套路由。
编辑
如果没有 ember-data,它看起来像:
posts: Ember.Route.extend({
route: 'posts',
member: Ember.Route.extend({
route: '/:post_id',
show: Ember.Route.extend({
route: '/'
}),
comments: Ember.Route.extend({
route: 'comments',
show: Ember.Route.extend({
route: '/:comment_id'
})
})
})
})
您将有两个类App.Post
& App.Comment
,具有find
类方法和id
实例属性。
App.Post = Ember.Object.extend({
id: null
});
App.Post.reopenClass({
find: function (id) {
// retrieve data, instanciate & return a new Post
}
});
App.Comment = Ember.Object.extend({
id: null
});
App.Comment.reopenClass({
find: function (id) {
// retrieve data, instanciate & return a new Comment
}
});