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

Dha*_*dan 4 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') };
        }
    });
Run Code Online (Sandbox Code Playgroud)

Ember文档说:

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

但我无法理解在路由类中使用序列化挂钩

Mar*_*var 7

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

例.

假设您具有以下用户模型,具有以下属性.

id
username
email
Run Code Online (Sandbox Code Playgroud)

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

{{#each users}}
  {{#link-to user.show this }} {{username}} {{/link-to}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

因此,当Ember看到这个链接到帮助器时,我会将其转换为链接,这可能看起来像这样

<a href="/user/1">elvar</a>
Run Code Online (Sandbox Code Playgroud)

现在这里的默认行为是使用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') };
    }
});
Run Code Online (Sandbox Code Playgroud)

现在链接到帮助器将产生以下代码.

 <a href="/user/elvar">elvar</a>
Run Code Online (Sandbox Code Playgroud)