获取Ember DS.Model Class的服务器URL
在我的模型中使用Ember数据时,在某些情况下,我需要解决数据限制并访问服务器上的其他准安宁URL。
例如,我有一个记录数据流的Feed
对象。 为了访问模型,我有一个RESTful端点:
/feeds/:feed_id
为了开始和停止录制Feed,我需要将PATCH
发送到以下网址:
/feeds/:feed_id?update_action=start
随后我可以重新加载我的模型并查看其中反映的更改。
在这种情况下,我需要访问$.ajax
,并且URL与Ember使用的URL相同。 但是,我无法弄清楚如何从Ember中获取这些信息。
到目前为止,我能做的最好的是:
DS.Model.reopen
rootForModel: Ember.computed( ->
@.store.adapterForType(@).serializer.rootForType(@.constructor)
)
pluralRootForModel: Ember.computed( ->
@.store.adapterForType(@).serializer.pluralize(@get("rootForModel"))
)
对于App.FeedItem
一个实例,我可以这样做:
this.get("rootForModel") # feed_item
this.get("pluralRootForModel") # feed_items
我猜测这将保持与适配器中进行的任何设置同步。
随后,我可以打电话给我:
$.ajax
url: @get("pluralRootForModel") + "/" + @get("id")
data:
update_action: "start"
type: "PATCH"
这完全在左边的领域? 有没有更直接的方式来编写这些网址?
另一个(相关问题)是获取给定模型的下划线名称。
App.MyModelController => my_model_controller
我做了类似的事情:
Ember.Object.reopenClass
###*
* The underscored name for this.
* i.e. App.MyClass -> my_class
* From an instance, use this.constructor.underscored_class_name()
* @return {String} This classname, underscored.
###
underscored_class_name: ->
_.underscored("#{@}".replace(/^.*?./g, ""))
这是疯了吗? 有没有更好的方法?
查看buildURL
中的DS.RESTAdapter
。
如果您想在服务器路径和密钥中使用下划线,请查看DS.ActiveModelAdapter
(及其默认序列化程序DS.ActiveModelSerializer
)。 这个适配器有自己的buildURL
实现。
上一篇: Get server URL for Ember DS.Model Class
下一篇: AWB not confident