2014-01-21 59 views
2

我有一種情況,當用戶按下刷新按鈕時,我想要reload模型。我之前使用Ember-Model實現了此功能,但是,我們最近將其移至Ember-Data,並且在試圖從模型類運行任何method時收到錯誤消息。任何幫助,將不勝感激。Ember.js在運行類方法時拋出「沒有方法」錯誤

單擊按鈕時錯誤:

Uncaught TypeError: Object [object Object] has no method 'reload' 

應用程序的結構:

App.ApplicationAdapter = DS.DjangoRESTAdapter.extend({ 
    namespace: 'api/1' 
}); 

App.SomeRoute = Ember.Route.extend({ 
    model: function() { 
    return this.store.find('publishable'); 
    }, 
}); 

App.SomeModel = DS.Model.extend({ 
    title: attr(), 
    description: attr(), 

    authors: hasMany('author', { async: true }), 
    category: belongsTo('page', { async: true }), 

    published: attr(), 
    publish_from: attr(), 
    slug: attr(), 

    contentType: attr(), 
}); 

App.SomeController = Ember.ArrayController.extend({ 
    actions : { 
    reload: function(model) { 
     model.reload(); 
    } 
    } 
}); 

<div> 
    <span {{action reload model}} class="btn"></span> 
</div> 

當我控制器上的動作內登錄this.get('model')。我收到以下內容:

Class {type: function, content: (...), store: Class, isLoaded: true, isUpdating: false…} 
__ember1390344611587: "ember592" 
__ember1390344611587_meta: Object 
_super: undefined 
arrangedContent: (...) 
content: (...) 
get content: function() { 
set content: function (value) { 
isLoaded: true 
isUpdating: false 
store: Class 
toString: function() { return ret; } 
type: App.Publishable 
__proto__: Object 
+0

很可能您所獲得的對象不是DS.Model的一個實例。你應該調試你的代碼來找出它的真實性。作爲一個側面說明,你的關係是異步的,所以試圖「獲取」它們會返回一個承諾,而不是一個模型。這可能是你的問題。 – GJK

+0

它也可以幫助你使用'Ember.inspect(模型)'來查看你正在處理的對象。 –

回答

0

reload存在於單個記錄,而不是記錄的陣列。

只是要完成,重新加載也不存在承諾,如果它是一個承諾,你需要then(...)它獲得真正的記錄(這是異步關係)。

promise.then(function(record){ 
    record.reload(); 
}); 
+0

任何想法如何重新加載模型比? –

+0

如果它是集合,我認爲它是,您將要迭代集合並重新加載每個模型。如果您不想這樣做,您可以卸載該類型的所有記錄並再次尋找,這可能更簡單。它是一組記錄嗎? – Kingpin2k

+0

是的,這是一個帖子的集合。 –

相關問題