我正在努力思考 Ember.js 会喜欢的概念。我想要的是以下内容。我现在有一个现有的 Ember 数据模型,名为Article
。让我们说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
the duplicateArticle
行动被调用。我直观地执行以下操作App.ArticleController
:
duplicateArticle: function () {
return this.transitionToRoute('article.new', this.get('model');
}
但这是行不通的。我想是因为我的文章中需要一条路径。新路线。但是,当用户单击“新建”按钮时,我不需要 ID。
这个问题有有效的解决方案吗?
编辑:到目前为止我的尝试:
var currentArticle = this.get('model');
currentArticle.set('id', null);
var duplicatedArticle = this.store.createRecord('article', currentArticle);
duplicatedArticle.save();
and:
var duplicatedArticle = Ember.copy(this.get('model'), true);
and:
var newArticle = JSON.parse(JSON.stringify(this.get('model')));
var duplicatedArticle = this.store.createRecord('article', newArticle);
duplicatedArticle.save();
最后一次尝试确实有效,除了belongsTo
and hasMany
特性。
难道没有 Ember 的方法可以做到这一点吗?
参考:
Ember克隆模型创造新纪录
有没有办法将 Ember 对象转换为纯 JavaScript 对象?
迭代 Ember.js ember-data 记录数组
如何克隆 Ember 数据记录,包括关系?(没有回答,75%和我一样的问题)
.
更新:一个简单的例子属于保存的项目
hasMany 不起作用。如果您有解决方案,请贡献此答案!
我的最终解决方案没有 hasMany items 现在如下:
在我的 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);
});
},