简体   繁体   中英

Get server URL for Ember DS.Model Class

In using Ember Data for my models, there are some cases where I need to work around the data limitations and access other quasi-restful URLs on my server.

For example, I have a Feed object that records a stream of data. For accessing the models I have a RESTful endpoint:

/feeds/:feed_id

In order to start and stop recording a feed, I need to send a PATCH to a url like:

/feeds/:feed_id?update_action=start

Subsequently I can reload my model and see the changes reflected therein.

In this case, I need to access $.ajax and the URL is the same as the one Ember would use. However, I can't figure out how to eke this information out of Ember.

So far, the best I can do is:

DS.Model.reopen

  rootForModel: Ember.computed( ->
    @.store.adapterForType(@).serializer.rootForType(@.constructor)
  )

  pluralRootForModel: Ember.computed( ->
    @.store.adapterForType(@).serializer.pluralize(@get("rootForModel"))
  )

Such that for an instance of App.FeedItem I can do:

this.get("rootForModel") # feed_item
this.get("pluralRootForModel") # feed_items

And I'm guessing this would stay in sync with any settings made in the Adapter etc.

Subsequently, I can call like:

$.ajax
  url: @get("pluralRootForModel") + "/" + @get("id")
  data:
    update_action: "start"
  type: "PATCH"

Is this totally out in left field? Is there a more direct way to compose these URLs?

Another (related issue) is getting the underscored name for a given model.

App.MyModelController  => my_model_controller

I've done something like:

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, ""))

Is this crazy? Are there any better ways?

Check out buildURL in DS.RESTAdapter .

If you want to use underscores in server paths and keys, check out DS.ActiveModelAdapter (and its default serializer, DS.ActiveModelSerializer ). This adapter has its own implementation of buildURL .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM