Ember.js路由器和动态段

Ember.js路由器和动态段

问题描述:

我一直在使用Ember's Router(v1.0.pre)单动态段,真的很满意。
这么多魔法Ember.js路由器和动态段

不过,我跟多个动态段struggeling:

  • 什么都要serialize()/deserialize()回报?
  • transitionTo()电话和那里的电话怎么样?

有人可以对此有所了解吗?

+0

我很想知道Ember世界对“动态细分市场”意味着什么。 – Abdull 2013-03-25 13:32:34

+0

@Abdull,“segment” - URL的一部分,“动态” - 根据应用程序的当前状态而变化。很简单,不是吗? – raindev 2015-05-09 09:27:13

  • serializedeserialize只应实施时您的上下文对象具有自定义序列(即不是灰烬数据模型实例)。所以你不应该在使用完整的烬栈时实现这些方法。

  • 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 
    } 
}); 
+0

谢谢迈克,那就是我现在有多远。 我没有使用烬数据,所以我必须自己去做find()。 在你的例子中:如何'serialize()'/'反序列化()'看看路线_posts.member.comments.show_? – david8401 2012-08-09 13:29:02

+0

我已经添加了用于无数据解决方案的示例。希望这可以帮助! :-) – 2012-08-09 15:20:40

+0

迈克,感谢您的更新,但在您的示例中,它基本上每条路线只有1个动态细分。 我的用例是:我有一个仪表板,每个控件由1个控制器控制。同时可以显示多个小部件。 我期待这样一个网址:''/ charts/chart1 /:id/chart2 /:id'' 因此,现在我需要将多个上下文传递给路由'charts'并让它设置每个控制器的每个上下文。这就是我陷入困境。 – david8401 2012-08-09 15:33:10