2016-08-25 9 views
0

ember-dataとJSONAPISerializerを使ったEmberアプリケーションでは、タスクモデルと優先度モデルがあります。タスクは優先度に属し、優先度はそれに関連する多くのタスクを持つことができます。コントローラ内のモデルの属している属性を変更する方法

APP /モデル/ task.js

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

APP /モデル/ priority.js

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

次のようにモデルでありますユーザーはタを編集できますその優先度を含む属性を変更します。これはコントローラで処理されます。

編集フォームには、優先度を選択できるドロップダウンがあります。このドロップダウンは、ストアに照会することによってコントローラによって設定されます。

私は、優先度を除くすべての属性で機能する編集と保存の部分を持っています。私はタスクを保存するときに変更された優先度をつけることができません。

私が試したのは、ドロップダウンリストで選択した値と一致するタイトルの優先度をストアに問い合わせて、その値をモデルに設定することでした。

私の最初の試みでのコントローラのコードは以下の通りであり、動作しませんでした。

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

モデルを保存する前に優先度を変更するにはどうすればよいですか?

更新:

私は、以下のいずれかに初期のコードを変更し、this.store.queryRecord(...)は、レコードを返さないので、それは

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

タスクの優先度を設定するにはどうすればよいですか? –

+0

私は、ドロップダウンから、表題の値と優先順位のための店に照会して、動作しないモデルにそれを設定してみてください。詳細は私の元の質問に追加されました。 – smartreference

+0

優先度を設定するためのコードが役立つかもしれません。しかし、 'task.set( '優先'、selectedPriority);' '返しstore.query'' RecordArray'を –

答えて

0

を動作するようです(すぐに)、それは約束を返す。

あなたはしなければならない。

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

データが変更されても構わない場合は、peekRecordと言うコードを変更することができます(既にプルダウンを設定するためにストアに優先度をロードしている可能性があります)ので、あなたが店に持っている優先順位レコードがロードされてから変更されていないことを心配していない場合にのみ、もう一度ラップする必要があります。 –

+0

チップのロバートありがとう、それは私がやったことであり、うまく動作するようになった。 – smartreference

関連する問題