我想要克隆当前正在编辑的模型.
我找到了几种几乎可以工作的方法.但两者都不完美.
1)model.get('data.attributes')获取除camelCase形式的关系之外的所有属性,生成新的记录,但当然缺少关系.
2)model.serialize()生成一个JSON对象,其中包含所有属性,包括关系.但createRecord由于对象不是camelCased(具有下划线的属性first_name不会被处理),因此无法很好地处理它
创建克隆后,我想transaction.createRecord(App.Document, myNewModelObject)更改/设置几个属性,最后commit().任何人都有一些如何做到这一点的见解?
我找不到任何方法来完成这种转换的任务,因为我找不到任何方法来获取对象的Ember.js属性.Ember.keys仅返回我在create其中设置或使用get的属性,并且声明的属性Ember.extend不会显示在那里.我使用这些属性来设置默认值(例如,[]对于数组属性)
我整天都在反对这个问题,我觉得我已接近解决方案,但却无法实现.我正在使用Ember.js和Ember-Data以及Fixtures适配器,最终迁移到REST适配器.基本问题是:我有网站和主管,有多对多的关系.我想向用户显示他们现有站点/主管配对的选择框,按站点排序,即:
我需要将这两个资源争用到一个数组中,我可以将其传递给从Ember.Select继承(或将继承)的视图.目前我正在尝试使用Supervisors控制器上的一个方法,我称之为"平坦",因为它将返回一个表示这些关系的扁平数组.控制器如下所示.我正在使用.find().then()来处理承诺完成后的数据.我得到的数据似乎包含我的所有四个灯具,但是当我尝试它们的任何可枚举方法时(特别是forEach),它的行为就像它只返回了第一个对象一样.我试过迭代数据对象以及data.get('content').我对Ember很新,所以也许我不管怎么说这都是错的,但无论如何这对我来说似乎很奇怪.这是我的代码:
App.SupervisorsController = Ember.ArrayController.extend({
flat: function(){
return App.Supervisor.find().then(function(data){
var c = data.get('content') ;
console.log(c) ; // <-- logs an object containing four records,
// with attribute "length" showing 4
// Great! (see below for log output)
console.log(c[0]) ; // <-- logs first record. Great!
console.log(c[1]) ; // <-- undefined (?!)
console.log(c[2]) ; // <-- undefined (?!)
console.log(c[3]) ; // <-- undefined (?!) …Run Code Online (Sandbox Code Playgroud) 我已经发现我可以克隆Ember数据记录并复制其属性,但没有克隆任何belongsTo/ hasMany关系.如果我不知道哪种关系可能会脱离现有的关系,我能以某种方式做到这一点吗?
作为参考,这里是我将克隆Ember数据记录的属性:
var attributeKeys = oldModel.get('constructor.attributes.keys.list');
var newRecord = this.get('store').createRecord(oldModel.constructor.typeKey);
newRecord.setProperties(oldModel.getProperties(attributeKeys));
Run Code Online (Sandbox Code Playgroud)