Emberjs Не может клонировать объект Ember.Object, который не реализует Ember.Copyable
Я использую ember 1.3.1 и ember-data 1.0.0-beta.5. При создании нового режима я получаю следующую ошибку:
Утверждение не выполнено: невозможно клонировать объект Ember.Object, который не реализует Ember.Copyable
Ниже приведен мой модельный код
App.myModel = DS.Model.extend({ name: DS.attr('string'), возраст: DS.attr('string') });
В моей функции создания маршрута
return Em.Object.create({});
и, наконец, сохранить, что я делаю следующее
this.store.createRecord('свойство', this.get('model'));
Хотя несмотря на ошибку, моя бэкэнд-услуга называется успешно, и новая модель сохраняется.
Пожалуйста, направляйте.
Спасибо
Ответы
Ответ 1
У меня была та же проблема, которую я исправил, выполнив следующие действия:
В модельной функции маршрута замените
return Em.Object.create({});
с
return this.store.createRecord('myModel');
и при сохранении замените
this.store.createRecord('myModel', this.get('model'));
с
this.get('model').save();
Ответ 2
Для полноты, в сценарии, описанном @acidleaf, это решение, предлагаемое Yehuda Katz
из команды ember core в этом видео:
Off the Menu: Создание клиентской стороны с помощью Ember и Rails - Yehuda Katz @Rails Israel 2013
На пути, с которого вы возвращаете список ресурсов для отображения (т.е. множественную версию ресурса StoriesRoute, PostsRoute и т.д.), вы вернете отфильтрованный список, содержащий те, которые не новы:
model: function() {
this.store.find('myModel');
return this.store.filter('myModel',function(myModel){
return !myModel.get('isNew');
});
}
Ответ 3
Я новичок в Ember и все еще пытаюсь поймать все проблемы, возникающие при переходе на более новые версии Ember и Ember Data, но...
С одной стороны, я думаю, что у вас есть ошибка в последнем блоке кода и что это должно быть:
this.store.createRecord('myModel', this.get('model'));
// myModel instead of property
Но, с другой стороны, я не думаю, что это будет проблемой: -/
попробуйте посмотреть (и сравнить) с изменениями для данных Ember здесь: https://github.com/emberjs/data/blob/master/TRANSITION.md
а также на этом http://discuss.emberjs.com/t/createrecord-using-this-get-model-throws-an-error/3968 или аналогичном
надеюсь, что это поможет!
J.
Ответ 4
Я столкнулся с этой проблемой, изучая Ember. Принятый ответ работает, но он сначала создает новую пустую запись в магазине. Это было нежелательно в моем приложении, поскольку оно отображает пустую запись в моем представлении.
Мое решение
маршрутизатор
App.ItemsNewRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('content', {});
}
});
контроллер
App.ItemsNewController = Ember.ObjectController.extend({
actions: {
save: function() {
this.store.createRecord('item', {
title: this.get('newTitle'),
category: this.get('newCategory')
}).save();
this.transitionToRoute('items');
}
}
});
Шаблон
<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>