Ember.js error: Object Photo has no method 'eachRelatedType'

筅森魡賤 提交于 2019-12-11 19:37:11

问题


I’m trying to create some routes that filter out approved and disapproved photos from my model (based on a boolean value).

Here’s my main photos, approved and disapproved routes:

# router.js
App.Router.map ->
  @resource "photos", ->
    @resource "photo",
      path: ":photo_id"
    # additional child routes
    @route "approved"
    @route "disapproved"

# photos_routes.js
App.PhotosRoute = Ember.Route.extend(
  model: ->
    App.Photo.find()
)

App.PhotosApprovedRoute = Ember.Route.extend(
  model: ->
    @store.filter "Photo", {approved: true}, (photo) ->
      photo.get("approved")
  renderTemplate: ->
    @render "photos"
    @render controller: "PhotosController"
)

App.PhotosDisapprovedRoute = Ember.Route.extend(
  model: ->
    @store.filter "Photo", {approved: false}, (photo) ->
      not photo.get("approved")
  renderTemplate: ->
    @render "photos"
    @render controller: "PhotosController"
)

Here’s my photo.js model:

App.Photo = DS.Model.extend(
  name: DS.attr("string")
  description: DS.attr("string")
  image_url: DS.attr("string")
  approved: DS.attr("boolean")
)

And finally, my application.hbs and photos.hbs templates:

{{!-- application.hbs --}}
<header id="header">
  <h2>{{#link-to "index"}}Home{{/link-to}}</h2>

  <nav>
    <ul>
      <li>{{#link-to "photos"}}All photos{{/link-to}}</li>
      <li>{{#link-to "photos.approved"}}Approved{{/link-to}}</li>
      <li>{{#link-to "photos.disapproved"}}Disapproved{{/link-to}}</li>
    </ul>
  </nav>
</header>

<div id="content">
  {{outlet}}
</div>

{{!-- photos.hbs --}}
<h1>Photos</h1>

<ul>
  {{#each controller}}
    <li class="masonry-brick">
      <img {{bind-attr src=image_url}} alt="Logo">
    </li>
  {{else}}
    <li>There are no photos.</li>
  {{/each}}
</ul>

{{outlet}}

When I click the link-to on either the photos.approved or photos.disapproved, I get the following errors in console:

TypeError: Object Photo has no method 'eachRelatedType'
Uncaught Error: Assertion Failed: TypeError: Object Photo has no method 'eachRelatedType'

Full stack trace:

TypeError: Object Photo has no method 'eachRelatedType'
    at DS.JSONSerializer.DS.Serializer.extend.configureSideloadMappingForType (http://localhost:3000/assets/ember-data.js?body=1:7798:10)
    at DS.JSONSerializer.DS.Serializer.extend.sideload (http://localhost:3000/assets/ember-data.js?body=1:7768:10)
    at DS.JSONSerializer.DS.Serializer.extend.extractMany (http://localhost:3000/assets/ember-data.js?body=1:7692:10)
    at superWrapper [as extractMany] (http://localhost:3000/assets/ember.js?body=1:1240:16)
    at DS.Adapter.Ember.Object.extend.didFindQuery (http://localhost:3000/assets/ember-data.js?body=1:8329:29)
    at http://localhost:3000/assets/ember-data.js?body=1:9912:15
    at invokeCallback (http://localhost:3000/assets/ember.js?body=1:9754:19)
    at publish (http://localhost:3000/assets/ember.js?body=1:9424:9)
    at Promise.publishFulfillment (http://localhost:3000/assets/ember.js?body=1:9844:7)
    at Object.DeferredActionQueues.flush (http://localhost:3000/assets/ember.js?body=1:5894:24)
    at Object.Backburner.end (http://localhost:3000/assets/ember.js?body=1:5985:27) ember.js?body=1:3462
Uncaught Error: Assertion Failed: TypeError: Object Photo has no method 'eachRelatedType' ember.js?body=1:74
Ember.assert ember.js?body=1:74
Ember.RSVP.onerrorDefault ember.js?body=1:16899
__exports__.default.trigger ember.js?body=1:8718
Promise._onerror ember.js?body=1:9442
publishRejection ember.js?body=1:9849
DeferredActionQueues.flush ember.js?body=1:5894
Backburner.end ember.js?body=1:5985
Backburner.run ember.js?body=1:6024
Ember.run ember.js?body=1:6427
hash.success ember-data.js?body=1:10004
fire jquery.js?body=1:3049
self.fireWith jquery.js?body=1:3161
done jquery.js?body=1:8236
callback

回答1:


Sorry, I shouldn't answer in comments. Your stack trace happens in your custom serializer. You should probably post that code, as that's where the error lies.

But given the error, and the fact that eachRelatedType is a static method, not an instance method, it's likely that you're calling it on an instance. Instead of photo.eachRelatedType(), call photo.constructor.eachRelatedType() or App.Photo.eachRelatedType().

EDIT: It seems you don't have a custom serializer. But Ember-Data never calls eachRelatedType, it only defines it. What version of Ember-Data are you using?

EDIT2: It seems that this particular issue was solved by upgrading from Ember-Data 0.14. Although no exact cause for it is known. (Could have been an Ember-Data bug.)



来源:https://stackoverflow.com/questions/22051678/ember-js-error-object-photo-has-no-method-eachrelatedtype

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!