jsfiddleを追加しました。コピーを作成して元のオブジェクトに戻す方法をデモストします。
コードも次のとおりです。私はコピー可能なミックスインを使ってコピー機能を追加しました。オブジェクトのインスタンスを保持しながら、オブジェクトの全体を置き換えるだけで、Projectの別のインスタンスから値をコピーする新しい "マージ"機能を追加しました。
は、私が「return App.Project.create(this)
」コピー機能であなたができることの通知を行なったし、実験的に同様に動作するように見えたが、私は明快さ(と確実性を)言って、具体的な特性をコピーします。
// By adding Copyable, you're adding the 'copy' mixin
App.Project = Ember.Object.extend(Ember.Copyable, {
save: function() {
console.log('saving')
},
copy: function(deep) {
return App.Project.create({
name: this.get('name'),
source: this.get('source')
});
},
// grab new values and directly insert them
// this way, it preserves object identity
merge: function(source) {
this.set('name', source.get('name'));
this.set('source', source.get('source'));
}
});
はここで、私は現在の場所にProjectFormで使用される新しいプロパティ(editCopy)を追加しました。編集が完了して保存がクリックされると、データはオリジナルにマージされます。
App.projectController = Ember.ArrayController.create({
content: [],
current: null,
editCopy: null,
saveCurrent: function() {
var toSave = this.get('current');
toSave.merge(this.get('editCopy'));
toSave.save();
}
});
App.ProjectEditLink = Ember.View.extend({
click: function() {
App.projectController.set('current', this.get('project'));
App.projectController.set('editCopy', this.get('project').copy());
}
});
App.ProjectForm = Ember.View.extend({
templateName: 'project_form_template'
});
App.projectController.pushObject(App.Project.create({
name: "jQuery",
source: "jquery.js"
}));
App.projectController.pushObject(App.Project.create({
name: "Ember",
source: "ember.js"
}));
App.projectController.pushObject(App.Project.create({
name: "Backbone",
source: "backbone.js"
}));
非常に良い。これはまさに私が探しているものです。ありがとう! – adamlogic