【问题标题】:EmberJS - How is find / findAll and the Route.deserialize and Route.serialize related?EmberJS - find / findAll 和 Route.deserialize 和 Route.serialize 有什么关系?
【发布时间】:2012-07-10 09:03:23
【问题描述】:

您好,在回答精彩问题 Ember.js - CRUD scenarios - Specifying View from within a Route 时提到 find 和 findAll 可用于模型上自动反序列化 URL。

这个界面是什么样子的,它真的是模型而不是控制器吗?

举个例子就好了。

【问题讨论】:

    标签: serialization ember.js ember-old-router


    【解决方案1】:

    与往常一样,文档是一个很棒的起点。查看https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/routable.js#L231-273 了解默认的序列化/反序列化方法。

    不过你的想法是对的。

    • Ember 采用最近的动态段,例如blog_post_id
    • 从末尾去掉_id,留下blog_post
    • 调用 Ember.String.classify('blog_post') 返回 BlogPost
    • 它在 Ember 命名空间下查找该模型类,例如App.BlogPost
    • 它在该模型上调用 find。例如App.BlogPost.find(1)

    编辑:

    针对 Neppord 的 cmets,他询问了多个动态段。 是的,ember-router 目前确实支持单个路由中的多个动态段。

    Ember.Route.extend({
      route: "/:post_type/:post_id"
    })
    

    如果您真的需要它,您将不得不编写自己的反序列化/序列化方法。 就我个人而言,我只会使用嵌套的动态状态。

    Ember.Route.extend({
      route: "/:post_type"
      post: Ember.Route.extend({
        route: "/:post_id"
      })
    })
    

    【讨论】:

    • 这是否意味着只有一个动态段,并且只有一个字段作为主键,并且该字段的名称必须是id,才能使用自动反序列化方法?
    • 一点也不,它取最后一个不匹配的动态段,所以你可以愉快地拥有多个。你可以编写你的 find() 方法来采用你喜欢的任何形式,所以它会很高兴地通过 slug 等进行搜索。
    • 我在代码的 cmets 中读到“仅猜测具有单个动态段的状态的模型类型”,这是否意味着您不能拥有使用标准反序列化方法并具有多个段的 url?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 2017-03-19
    • 2016-09-28
    • 2013-07-02
    • 2017-02-06
    相关资源
    最近更新 更多