在ember路由中使用序列化钩子

时间:2014-01-28 10:06:42

标签: ember.js

在ember路由类中使用serialize hook有什么用?

       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') };
        }
    });

Ember Documentation说:

如果您的动态片段以_id结尾,则默认模型钩子会将第一部分转换为应用程序命名空间中的模型类(post成为App.Post)。然后它将使用动态段的值调用该类的find。 默认的序列化挂钩将使用模型对象的id属性拉动动态段。

但我无法理解在路由类

中使用serialize hook

1 个答案:

答案 0 :(得分:7)

serialize方法确定要用作提供实体的参数的内容。

实施例

假设您拥有以下用户模型,并具有以下属性。

id
username
email

现在,如果您有用户列表,并且想要链接到节目用户详细信息页面,则可以使用这样的循环。

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

所以,当Ember看到这个链接帮助时,我会将它转换为链接,这可能看起来像这样

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