【问题标题】:Emberjs + ember-data find with paramEmberjs + ember-data 使用参数查找
【发布时间】:2015-03-31 19:59:22
【问题描述】:

我正在尝试基于这样的参数找到一个模型:

this.store.find('slide', {slideCategory: category});

但它返回:(编辑完整的堆栈跟踪)

TypeError: Cannot read property 'length' of undefined
at hi.extend.pushMany (ember-data.min.js?551b0279246c3:3)
at Dr.extend.load (ember-data.min.js?551b0279246c3:1)
at ember-data.min.js?551b0279246c3:1
at tryCatch (ember.debug.js?551b0279246c3:46898)
at invokeCallback (ember.debug.js?551b0279246c3:46910)
at publish (ember.debug.js?551b0279246c3:46881)
at ember.debug.js?551b0279246c3:27205
at Queue.invoke (ember.debug.js?551b0279246c3:871)
at Object.Queue.flush (ember.debug.js?551b0279246c3:936)
at Object.DeferredActionQueues.flush (ember.debug.js?551b0279246c3:741)

我正在通过 SlideRoute 中的操作运行此代码。

这是我的幻灯片模型的样子

App.Slide = DS.Model.extend({
    title: DS.attr('string'),
    note: DS.attr('string'),
    slideCategory: DS.belongsTo('slideCategory')
});

还有我的 SlideCategory 模型

App.SlideCategory = DS.Model.extend({
    title: DS.attr('string'),
    slides: DS.hasMany('slide', {async:true})
});

它与固定装置一起运行,这是一个记录:

{ 
    id: 1, 
    slideCategory: 1,
    title: 'Slide 1', 
    note: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse eget hendrerit lacus. Donec venenatis sagittis turpis a aliquet. Ut nec ipsum ac sem lobortis ultrices id eu ante. Aenean ut vehicula odio, non imperdiet risus. Aenean mattis diam nec nulla tincidunt, vitae vehicula dui vehicula.', 
}

我正在使用 ember 1.11 和 ember-data 1.0.0-beta.16

编辑

好吧,看来问题与查询夹具有关,ember-data默认不支持。

假设我使用另一个选项来获取我的幻灯片,我使用以下代码

this.store.find('slideCategory', category).then(function(slideCategory){
    slideCategory.get('slides').then(function(slides){

    }   
}

我原以为下面的代码会给我一个幻灯片数组,我可以在上面循环,但对象似乎不同。

这就是我得到的:

Class {
    __ember1427894067627: null
    __ember_meta__: Object
    __nextSuper: undefined
    canonicalState: Array[3]
        0: Class
        1: Class
        2: Class
    length: 3
    __proto__: Array[0]
    currentState: Array[3]
    isLoaded: true
    isPolymorphic: undefined
    length: 3
    record: Class
    relationship: ember$data$lib$system$relationships$state$has$many$$ManyRelationship
    store: Class
    type: App.Slide
    __proto__: Class

这似乎差不多,但我真的不知道如何循环这个对象。 canonicalState 数组中的 3 个元素似乎是我正在寻找的 3 张幻灯片。当我打开该类对象时,我得到了幻灯片对象的确切外观。

对不起,如果这看起来很愚蠢,但我是 ember 新手,我找不到这个问题的答案。

【问题讨论】:

  • 您的路线中category 的值是多少?
  • 在这种情况下它是 1。但即使我将它硬编码为 {slideCategory: 1} 或 {id: 'fixture-0'} 它也不起作用。只要有参数添加,错误就会出现。
  • 夹具适配器不支持查询,但这并不能解释您的错误。你能粘贴整个堆栈跟踪吗?
  • TypeError: 无法在 Dr.extend.load (ember-data.min. js?551b008dd7991:1) at ember-data.min.js?551b008dd7991:1 at tryCatch (ember.debug.js?551b008dd7991:46898) at invokeCallback (ember.debug.js?551b008dd7991:46910) at publish (ember.debug .js?551b008dd7991:46881) at ember.debug.js?551b008dd7991:27205 at Queue.invoke (ember.debug.js?551b008dd7991:871) at Object.Queue.flush (ember.debug.js?551b008dd7991:936) at Object.DeferredActionQueues.flush (ember.debug.js)
  • 您应该编辑您的帖子并将堆栈跟踪放在那里。在 cmets 中很难阅读。

标签: ember.js model ember-data has-many param


【解决方案1】:

不要使用 ember-data 的缩小版本,它会遗漏大量调试信息。 pushMany 函数应该总是接收一个数组,并且有Ember.assert 守卫,它会用一个很好的错误消息告诉你发生了什么。缩小版应该用于生产而不是测试。

这也解释了为什么您没有收到关于夹具适配器不支持查询的错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2013-01-02
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多