2017-01-17 54 views
0

我遇到了簡單的EmberFire查詢問題。 我想按名稱查找部門對象,然後根據下面描述的數據模型將其添加到大學部門。新手Emberfire查詢

我收到的錯誤是:

TypeError: Cannot read property 'pushObject' of undefined

我在做什麼錯?

   store.query('college', {orderBy: 'name', equalTo: "CAS"}).then(function(c){ 
       var college = c 
       console.log(college); 
       dept.set('college',college); 
       college.get('departments').pushObject(dept); 
       dept.save(); 
       college.save() 

      } 
     ) 

哪裏部門:

store.query('department', {orderBy: 'name', equalTo: "Testing One"}).then(function(depts){ 
       // var dept = depts.get('content')[0] 
       var dept = depts}) 

這裏是我完整的查詢:

findOne(){ 
     var store = this.store 
     // store.query('department', {orderBy: 'name', equalTo: "Testing One"}).then(function(depts){ 
     store.query('department', {orderBy: 'name', equalTo: "Testing One"}).then(function(depts){ 
      // var dept = depts.get('content')[0] 
      var dept = depts 
      console.log(dept); 
      //Add it to college 
      store.query('college', {orderBy: 'name', equalTo: "CAS"}).then(function(c){ 
       var college = c//.get('content')[0] 
       console.log(college); 
       dept.set('college',college); 
       college.get('departments').pushObject(dept); 
       dept.save(); 
       college.save() 

      } 
     ) 
     }) 
}, 

部:

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    faculty:DS.hasMany('faculty'), 
    college: DS.belongsTo('college') 
}); 

學院:

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    departments: DS.hasMany('department') 
}); 

編輯:c從查詢對象:

Class 
__ember1484688357664 
: 
"ember632" 
__ember_meta__ 
: 
Meta 
__firebaseCleanup 
: 
() 
_super 
: 
ROOT() 
_updatingPromise 
: 
null 
content 
: 
(...) 
get content 
: 
GETTER_FUNCTION() 
set content 
: 
SETTER_FUNCTION(value) 
isLoaded 
: 
true 
isUpdating 
: 
false 
links 
: 
EmptyObject 
manager 
: 
Class 
meta 
: 
EmptyObject 
query 
: 
Object 
store 
: 
Class 
type 
: 
[email protected]:college: 
__proto__ 
: 
Class 
+0

你確定「c」從查詢中返回一個對象嗎?你應該先檢查一下。 console.log(c)然後檢查它是否打印到控制檯。我可能會錯過這些部門。 – talves

+0

@talves請檢查更新的答案。我打印了'c'。這是一個「大學」類型。我認爲它應該有一個空的數組部門,如果沒有與它相關聯? –

+0

對不起,您可能想嘗試console.log(college.get('departments')),它應該是未定義的。也許你的意思是college.get('部門')單數。 – talves

回答

1

你應該嘗試類似如下的內容:

store.query('department', {orderBy: 'name', equalTo: "Testing One"}).then(function(c) { 
    return c.get('firstObject'); 
}).then(function(college) { 
    departments = college.get('departments'); 
    departments.pushObject(dept); 
    ... 
}); 
+0

當然,您需要檢查返回null。 – talves

+0

它的工作原理。非常感謝。我在哪裏可以瞭解更多關於使用emberfire查詢數據的信息? –

+0

我通常只是使用文檔或審查開源項目,但也有教程。我也在YouTube上看過一些演示。很高興它對你有效。 :) – talves

0

talves的答案將在大多數情況下工作,但它是一個有點難看。由於EmberFire沒有提供更好的解決方案,所以這是解決這個問題的常用方法。但是,這是一個可以滿足所有查詢需求的插件。你可以看看here