ember.js - guides - emberjs No se puede clonar un objeto Ember.Object que no implementa Ember.Copyable
ember js guides (4)
En aras de la integridad, en el escenario descrito por @acidleaf, esta es la solución ofrecida por Yehuda Katz
del equipo central de brasas en este video:
Fuera del menú: Construyendo un lado del cliente con Ember y Rails - Yehuda Katz @ Rails Israel 2013
En la ruta desde la que está devolviendo una lista de recursos para mostrar (es decir, la versión plural del recurso StoriesRoute, PostsRoute, etc.), devolverá una lista filtrada que contiene aquellos que no son nuevos:
model: function() {
this.store.find(''myModel'');
return this.store.filter(''myModel'',function(myModel){
return !myModel.get(''isNew'');
});
}
Estoy usando ember 1.3.1 y ember-data 1.0.0-beta.5. Al crear un nuevo modo me sale el siguiente error
Fallo de aserción: no se puede clonar un objeto Ember.Object que no implementa Ember.Copyable
El siguiente es mi código de modelo
App.myModel = DS.Model.extend ({name: DS.attr (''string''), age: DS.attr (''string'')});
En mi función crear modelo de ruta
devuelve Em.Object.create ({});
y finalmente en guardar lo hago siguiendo
this.store.createRecord (''propiedad'', this.get (''modelo''));
Aunque a pesar del error, mi servicio de fondo se llama con éxito y se guarda el nuevo modelo.
Por favor guia
Gracias
Me he topado con este problema mientras aprendía Ember. La respuesta aceptada funciona, pero primero crea un nuevo registro vacío en la tienda. Esto no fue deseado en mi aplicación ya que muestra el registro vacío en mi vista.
Mi solución
Enrutador
App.ItemsNewRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set(''content'', {});
}
});
Controlador
App.ItemsNewController = Ember.ObjectController.extend({
actions: {
save: function() {
this.store.createRecord(''item'', {
title: this.get(''newTitle''),
category: this.get(''newCategory'')
}).save();
this.transitionToRoute(''items'');
}
}
});
Modelo
<script type="text/x-handlebars" data-template-name="items">
<ul class="list-group">
{{#each}}
<li class="list-group-item">{{title}} - {{category}}</li>
{{/each}}
{{outlet}}
<li class="list-group-item">{{#link-to "items.new"}}Add{{/link-to}}</li>
</ul>
</script>
<script type="text/x-handlebars" data-template-name="items/new">
<li class="list-group-item">
{{input class="form-control" value=newTitle placeholder="Title"}}
{{input class="form-control" value=newCategory placeholder="Category"}}
<button class="btn btn-default" {{action "save"}}>Save</button>
</li>
</script>
Soy bastante nuevo en Ember y todavía estoy tratando de detectar todos los problemas causados al migrar a nuevas versiones de Ember y Ember Data, pero ...
Por un lado, creo que tienes un error en el último bloque de código y que debería ser:
this.store.createRecord(''myModel'', this.get(''model''));
// myModel instead of property
Pero por otro lado, no creo que este sea el problema: - /
de todos modos, intente buscar (y comparar) los cambios para los datos de Ember aquí: https://github.com/emberjs/data/blob/master/TRANSITION.md y también en este http://discuss.emberjs.com/t/createrecord-using-this-get-model-throws-an-error/3968 o similar
¡Espero eso ayude!
J.
Tuve el mismo problema que solucioné haciendo lo siguiente:
En el modelo de función de la ruta sustituir.
return Em.Object.create({});
con
return this.store.createRecord(''myModel'');
y en guardar reemplazar
this.store.createRecord(''myModel'', this.get(''model''));
con
this.get(''model'').save();