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>