2016-08-25 87 views
0

在使用ember-data和JSONAPISerializer的我的Ember應用程序中,我有一個任務模型和一個優先模型。任務屬於優先級,並且優先級可以具有與其關聯的許多任務。如何在控制器中更改屬於某個模型的屬性

的型號如下

應用程序/模型/ task.js

export default DS.Model.extend({ 
    title: DS.attr ('string'), 
    description: DS.attr ('string'), 
    isComplete: DS.attr ('boolean'), 
    priority: DS.belongsTo('priority') 
}); 

應用/模型/ priority.js

export default DS.Model.extend({ 
    title: DS.attr ('string'), 
    description: DS.attr ('string'), 
    tasks: DS.hasMany ('task'), 
}); 

的用戶可以編輯ta sk並更改任何屬性,包括其優先級。這是在控制器中處理的。

編輯窗體有一個下拉列表,可以從中選擇優先級。該下拉列表由控制器通過查詢商店來填充。

我有編輯和保存部分工作的所有屬性,除了優先級。保存任務時,我無法改變優先級。

我試過的是查詢商店優先與標題匹配下拉列表中選定的值,並在模型中設置。

第一次嘗試時控制器中的代碼如下所示,但無效。

var newPriority = this.get('store').queryRecord('priority', { 
    filter: { 
     title: newPriorityTitle 
    } 
}); 
this.get('model').set('priority', newPriority); 

如何在保存模型之前更改優先級?

更新:

我改變了最初的代碼下面的一個,似乎工作

this.get('store').queryRecord('priority', { 
    filter: { 
     title: newPriorityTitle 
    } 
}).then(function(data) { 
    this.get('model').set('priority', data); 
}); 
+0

你如何爲任務設置優先級? –

+0

我從商店的下拉菜單中查詢商店的優先級,然後嘗試將其設置到不起作用的模型上。詳細信息添加在我原來的問題。 – smartreference

+0

也許你的代碼設置優先級幫助我們。但'task.set('priority',selectedPriority);'應該可以工作 –

回答

0

因爲this.store.queryRecord(...)不返回記錄(立即),它返回一個承諾。

你要做的:

newPriority.then((priorityObj) => { 
    this.model.set('priority', priorityObj); 
} 
+0

如果你不關心數據可能已經改變,你可以改變你的代碼來說peekRecord(因爲你可能已經加載了商店中的優先級來填充你的下拉列表),然後它會同步返回,如果您不擔心自從您加載它之後,商店中的優先級記錄沒有發生變化,則必須再次包裝。 –

+0

感謝Robert的提示,這就是我所做的,並得到它的工作。 – smartreference

相關問題