jsfiddle을 복사하여 결과를 원래 개체로 다시 병합하는 방법을 보여줍니다.
코드도 아래에 있습니다. Copyable mixin을 통해 복사 기능을 추가하고 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