我需要更新模型中的一些数据,在这种情况下恰好是来自控制器的DS.RecordArray。我的目的是避免在save()之后进行另一个API调用以获取更新的数组。我不确定访问RecordArray的特定元素并修改它们的最佳方法是什么。
在我将模型转换为常规Ember数组之前,我还不确定是否有更好的方法可以避免我收到的循环引用错误。这是代码:
var subtypes = Ember.A();
this.get('model').forEach(function(subtype){
//converting the RecordArray to a regular array to
//avoid circular reference error
subtypes.pushObject(subtype);
});
let task = this.store.createRecord('savetask', {
id: 'savesubtypes',
docketType: this.get('docket'),
category: this.get('category'),
docSubtypes: subtypes
});
task.save().then((result) => {
//API returns task with modifications to
//docSubtypes
result.get('docSubtypes').forEach(function(subtype) {
//need to modify the RecordArray with the changed values from
//the API. How to match these records with the ones on the model?
}, this);
如果有任何不清楚的地方,请告诉我
答案 0 :(得分:0)
我举一个完整的例子来揭示Ember数据的力量。
我们假设你有
/model/contact.js
import Ember from 'ember';
import DS from 'ember-data';
export default DS.Model.extend({
notes: DS.hasMany(),
date: DS.attr(),
firstName: DS.attr(),
lastName: DS.attr(),
});
并且您的笔记模型应为
/model/note.js
import DS from 'ember-data';
export default DS.Model.extend({
contact: DS.belongsTo(),
reference: DS.attr(),
date: DS.attr(),
content: DS.attr()
});
现在假设你想为这个联系人保存一个新的音符,所以它很容易而不是让它变得复杂:我假设你想在动作触发时这样做,所以我定义了一个像newNote这样的函数
/rounte for example you want to save this note in rounte/note.js / template/note.hbs
newNote: function(noteContent) {
var newNoteData = {
content: noteContent, // Pass the notecontent to the function
contact: this.currentModel.get('contact'), //get your contact
};
this.store.createRecord('note', newNoteData).save().then(() => {
//do your notification or consolo.log('DONE');
}, function() {
// catch your error if any, alert('not saved !')
});
}
你的模板就像
<form class="form" {{action "newNote" noteContent on="submit" }}>
{{textarea value=noteContent placeholder="Quick Note" class="form-control custom-control" rows="2"}}
<button class="btn btn-success" type="submit">Save</button>
</form>
就是这样。你基本上不需要任何其他东西,其余的将由Ember本身处理。如果您这样做,您会发现页面上的注释列表也会立即更新,并且请求也会发送到您的API。
我希望这个简单的代码可以为您提供更多洞察力,您可以根据此优化代码并获得最佳结果。