Ember.js路由器和动态段
我一直在使用Ember's Router(v1.0.pre)单动态段,真的很满意。
这么多魔法。Ember.js路由器和动态段
不过,我跟多个动态段struggeling:
- 什么都要
serialize()
/deserialize()
回报? -
transitionTo()
电话和那里的电话怎么样?
有人可以对此有所了解吗?
serialize
和deserialize
只应实施时您的上下文对象具有自定义序列(即不是灰烬数据模型实例)。所以你不应该在使用完整的烬栈时实现这些方法。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
上下文将被传递给拨款的路线,而路由将陷入嵌套的路线。
编辑
无烬数据,它看起来像:
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
}
});
谢谢迈克,那就是我现在有多远。 我没有使用烬数据,所以我必须自己去做find()。 在你的例子中:如何'serialize()'/'反序列化()'看看路线_posts.member.comments.show_? – david8401 2012-08-09 13:29:02
我已经添加了用于无数据解决方案的示例。希望这可以帮助! :-) – 2012-08-09 15:20:40
迈克,感谢您的更新,但在您的示例中,它基本上每条路线只有1个动态细分。 我的用例是:我有一个仪表板,每个控件由1个控制器控制。同时可以显示多个小部件。 我期待这样一个网址:''/ charts/chart1 /:id/chart2 /:id'' 因此,现在我需要将多个上下文传递给路由'charts'并让它设置每个控制器的每个上下文。这就是我陷入困境。 – david8401 2012-08-09 15:33:10
我很想知道Ember世界对“动态细分市场”意味着什么。 – Abdull 2013-03-25 13:32:34
@Abdull,“segment” - URL的一部分,“动态” - 根据应用程序的当前状态而变化。很简单,不是吗? – raindev 2015-05-09 09:27:13