2015-11-20 15 views
0

我有一個items路線列出項目,當我單擊一個路線時,我會轉到顯示一個項目的item路線。非常標準,我已經設置好了,Ember魔術正在關注item路線的動態部分。創建除當前路線模型以外的模型的記錄

item路線中,我有一個動作處理程序,我想爲該物品創建出價,物品有許多出價和出價屬於一個物品和一個用戶。

在我item路線我已經試過打電話是

var newBid = this.store.createRecord('bid', { 
      user_id: 29, 
      item_id: 2565, 
      bid_amt: 600 
     }); 
    newBid.save().then(function(bid){ 
    console.log('saved bid\n'); 
    console.log(bid); 
    }).catch(function(reason){ 
    console.log(reason) 
    }); 

但在控制檯中我得到

Uncaught TypeError: DS.default.Attr is not a function 

有沒有辦法與Ember數據要做到這一點,而不必切換到直接的Ajax調用?

編輯:

我的適配器看起來像這樣

export default DS.RESTAdapter.extend({ 
    namespace: 'api' 
}); 

的項目模型看起來像這樣

export default DS.Model.extend({ 
    ... 
    canceled: DS.attr('boolean'), 
    bid: DS.hasMany('bid') 
}); 

用戶模型看起來像這樣

export default DS.Model.extend({ 
    bid: DS.hasMany('bid') 
}); 

及投標模型的外觀就像這個

export default DS.Model.extend({ 
    ... 
    user: DS.belongsTo('user'), 
    item: DS.belongsTo('item') 
}); 

我拿出的車型爲模型中的所有其他屬性是相當大的,我不認爲他們無所謂,沒有默認值被設置爲任何人。

+0

您能分享您的模型和您使用的適配器嗎? – cswright

回答

1

在餘燼數據中,您總是必須將整個模型,但不僅僅是id,傳遞給相關項目。 所以你的情況,你不得不做這樣的事情:

let user = this.store.peekRecord('user',29); 
let item = this.store.peekRecord('item', 2565); 

var newBid = this.store.createRecord('bid', { 
     user: user, 
     item: item, 
     bid_amt: 600 
    }); 

注意,如果請求的記錄還沒有在您的商店,但需要從服務器獲取你必須打電話findrecords而不是peekRecords,您只會收到承諾。在這種情況下,您必須等待承諾解決之前創建新的記錄!

相關問題