2012-08-09 131 views
2

我一直在使用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

回答

5
  • 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