本文介绍了Ember.js错误:对象照片没有方法'eachRelatedType'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一些路由,从我的模型中筛选出已批准和拒登的照片(基于布尔值)。

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

这是我的 photo.js 模型:

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

最后,我的 application.hbs photos.hbs 模板:

{{!-- 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}}

当我点击链接到 photos.approved photos.disapproved ,我在控制台中收到以下错误:

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'

全堆栈跟踪:

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


推荐答案

对不起,我不应该在评论中回答。您的堆栈跟踪发生在您的自定义序列化器中。您应该可以发布该代码,因为这是错误所在。

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.

但是给出错误,而且$ code> eachRelatedType 是一个静态方法,而不是一个实例方法,很可能你在一个实例上调用它。而不是 photo.eachRelatedType(),调用 photo.constructor.eachRelatedType()应用程序.Photo.eachRelatedType()

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().

编辑:您似乎没有自定义序列化程序。但是,Ember-Data从不会调用$ code> eachRelatedType ,它只定义它。你使用什么版本的Ember-Data?

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:似乎这个特殊的问题是通过从Ember-Data 0.14升级来解决的。虽然没有确切的原因是已知的。 (可能是Ember-Data错误。)

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.)

这篇关于Ember.js错误:对象照片没有方法'eachRelatedType'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-14 19:15