2014-01-28 53 views
3

在餘燼路由類中使用serialize鉤子有什麼用途?在餘燼路由中使用序列化鉤子

 App.PostRoute = Ember.Route.extend({ 
     model: function(params) { 
      return this.store.find('post', params.post_id); 
     }, 

     serialize: function(post) { 
      return { post_id: post.get('id') }; 
     } 
    }); 

灰燼文件說:

如果您的動態段_id結束,默認模式鉤子將第一部分轉換成模型類的應用程序的命名空間(交變App.Post)。然後,它將使用動態段的值調用該類上的find。 默認的序列化鉤子將使用模型對象的id屬性來拉動動態段。

,但我無法理解在路由類

回答

7

序列化方法確定的參數所提供的實體使用什麼用連載鉤。

例子。

假設您有以下用戶模型,並具有以下屬性。

id 
username 
email 

現在,如果你有一個用戶列表,並要鏈接到顯示用戶詳細信息頁面,您可以使用這樣一個循環。

{{#each users}} 
    {{#link-to user.show this }} {{username}} {{/link-to}} 
{{/each}} 

所以,當灰燼看到這個鏈接來幫手,我將其轉換爲一個鏈接,這可能是這樣的

<a href="/user/1">elvar</a> 

現在,這裏的默認行爲是使用id作爲參數,這就是你自己的例子所顯示的,我從模型中選擇了id。我們可以用序列化方法來改變它。

可以說,我們不是使用id,而是使用用戶名作爲參數。

App.UserShowRoute= Ember.Route.extend({ 
    model: function(params) { 
     return this.store.find('user', params.user); 
    }, 

    serialize: function(user) { 
     return { user: user.get('username') }; 
    } 
}); 

現在,鏈接幫助器會產生以下內容。

<a href="/user/elvar">elvar</a> 
+0

我同意你的意見。但是如果我們從你的UserShowRoute中移除序列化鉤子,它仍然可以工作。那麼爲什麼我們需要在路由類中使用該序列化鉤子。 – Dhakchianandan

+1

您不要,它默認爲模型ID。你只需要實現它,如果你想使用,例如一個slu,,往往是我的用例。 – MartinElvar

+0

您的「每個」循環是否在單獨的用戶路線中?所以你只需要序列化用戶路由(你鏈接到的那個),而不是用戶路由(你從哪裏鏈接)? – ahnbizcad