在我的模型中使用Ember數據時,在某些情況下,我需要解決數據限制並訪問服務器上的其他準穩定URL。獲取Ember DS.Model類的服務器URL
例如,我有一個Feed
對象,它記錄了一個數據流。爲了訪問模型我有一個RESTful端點:
/feeds/:feed_id
爲了開始和停止錄製的飼料,我需要一個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, ""))
這是瘋了嗎?有沒有更好的方法?
我決定使用'DS.RESTAdapter.prototype.buildURL('my-model-type')' – aceofspades