【发布时间】:2013-12-09 17:54:25
【问题描述】:
我正在为 Ember.js 喜欢的概念而苦苦挣扎。我想要的是以下内容。我现在有一个名为 Article 的现有 Ember 数据模型。假设 id 为 1 将显示在 /article/1 上。
当用户点击“新建”按钮时,他们会转换到“article.new”路线。查看我的路由器:
App.Router.map(function () {
this.resource('article', {path: '/article/:id'});
this.resource('article.new', {path: "/article/new"});
}
当用户在/article/1 处单击复制 按钮时,将调用duplicateArticle 操作。我在App.ArticleController中直观地做了以下操作:
duplicateArticle: function () {
return this.transitionToRoute('article.new', this.get('model');
}
但是这行不通。我想是因为我的 article.new 路线中需要一条路径。但是,当用户单击“新建”按钮时,我不需要 ID。
这个问题有有效的解决方案吗?
编辑:到目前为止我的尝试:
var currentArticle = this.get('model');
currentArticle.set('id', null);
var duplicatedArticle = this.store.createRecord('article', currentArticle);
duplicatedArticle.save();
和:
var duplicatedArticle = Ember.copy(this.get('model'), true);
和:
var newArticle = JSON.parse(JSON.stringify(this.get('model')));
var duplicatedArticle = this.store.createRecord('article', newArticle);
duplicatedArticle.save();
除了belongsTo 和hasMany 属性之外,最后一次尝试确实有效。
没有 Ember 方法可以做到这一点吗?
参考资料:
Ember clone model for new record
Is there any way to convert Ember Object into plain javascript object?
Iterating over Ember.js ember-data Record Arrays
How can I clone an Ember Data record, including relationships?(没有回答,75%和我一样的问题)
.
更新:一个简单的示例,其中还保存了 belongsTo 项
hasMany 不起作用。如果您有解决方案,请为这个答案做出贡献!
我没有hasMany项目的最终解决方案如下:
在我的 ArticleController 操作中:
duplicateArticle: function () {
var article = this.get('model').toJSON(),
self = this;
// todo implement saving hasMany items
// set belongsTo items by hand
article['landcode'] = this.get('landcode');
article['employee'] = this.get('employee');
article['cross_selling_article_relation'] = this.get('cross_selling_article_relation');
var duplicatedArticle = this.store.createRecord('article', article);
// save and transite to newly created article
duplicatedArticle.save().then(function (savedArticle) {
self.transitionToRoute('article', savedArticle.id);
});
},
【问题讨论】:
标签: ember.js ember-data