分享 Ember Data 1.0 overview

hungyuhei · 2013年10月26日 · 最后由 JeskTop 回复于 2013年10月30日 · 4140 次阅读

https://twitter.com/wycats/status/393826083575185408

Ember 1.1.2 已经发布了,期待 Ember Data 1.0

没有 EPF 那样的 fork 特性,没有 custom action 支持,现在还不好说最终版是什么样子。

#2 楼 @darkbaby123 不太了解 custom action 是什么,这样不是吗:

{{action 'foo'}}
// App.BarController
actions: {
  foo: function () { ... }
}

不是,是说的 REST API 的自定义 url。

你知道默认的 REST API 有五个 url:

  • GET /resource
  • GET /resource/:id
  • POST /resource
  • PUT /resource/:id
  • DELETE /resource/:id

但有时需要超出这些之外的,自定义的 url,比如:

  • PUT /resource/:id/some_action

不然默认的五个 url 是不够应对实际使用情况的。

在 Ember Data 里面要实现这个比较麻烦。需要自定义的太多,没有很方便的处理方法。作为 Ember Data 的 json 规范的 JSON API 也完全没有提及超出默认 REST API 的情况应该怎么设计 API。而且在 Github issues 里面我也没搜到相应的讨论和解决方案。所以我才说不知道最终版会是什么样子,不知道会不会支持这种特性。

关于一些 Ember Data 欠缺的东西,可以看看 10 Things You Can Do With EPF (That You Can't Easily Do With Ember Data) 。虽然文章比较老,现在一些东西比如 transaction 已经被 Ember Data 改掉了,但文章还是值得参考。

fork 特性倒是有提及,但也仅仅是提及而已,说不定会等到 Ember Data 1.x 去了。

Ember Data 的 beta 版我只用了很短一段时间,感觉是做好了的功能都考虑的比较完善,但一旦你需要它没有的功能,就比较难扩展。所以用到最后估计会作为 contributor 去一起加功能和修 bug。就像 EPF 作者说的一句话:If you use Ember Data, you will be a contributor.

#4 楼 @darkbaby123 原来是这样,我也一直在好奇要怎样实现这个,原来还是没有解决方案出来

#4 楼 @darkbaby123

App.Order = DS.Model.extend
  ...

  editOrderDeliveryInfo: (params) ->
    self = this
    $.ajax(
      type: "PUT"
      url: "/api/orders/#{self.get('id')}/set_delivery_info"
      data:
        set_delivery_info:
          express_number: params["express_number"]
          delivery_total: params["delivery_total"]
          delivery_place_id: params["delivery_place"]
          express_info_id: params["express_info"]
          cost_total: params["cost_total"]
    ).then( ->
      self.reload()
    )

现在来说,在 ember data 里面,我是这样写的,不知道怎么样的情况下需要对 ember data 添加新的特性。

好久没用 ED 了。对 model 调用 reload 是什么结果?重新调用 GET /api/orders/:id 去更新一遍吗?

#7 楼 @darkbaby123 更新 store 里的数据,就是这个 ajax 请求返回来的数据在 ED store 里的跟新一遍

需要 登录 后方可回复, 如果你还没有账号请 注册新账号