ember js — Uncaught Error: Ошибка утверждения: невозможно делегировать набор

я сталкиваюсь с этой ошибкой при сохранении данных в API

Uncaught Error: Assertion Failed: Cannot delegate set('firstName', a) to the 'content' property of object proxy <>: its 'content' is undefined

ниже мой код

import Ember from 'ember';


export default Ember.ObjectController.extend({
    isValid: Ember.computed(
        'email',
        'firstName',
        'lastName',
        'twitter',
        function() {
            return !Ember.isEmpty(this.get('email')) &&
            !Ember.isEmpty(this.get('firstName')) &&
            !Ember.isEmpty(this.get('lastName')) &&
            !Ember.isEmpty(this.get('twitter'));
        }
        ),
    actions:{
        save: function() {
            if (this.get('isValid')) {
                var _this = this;
                this.get('model').save().then(function(friend) {
                    _this.transitionToRoute('friends.show', friend);
                });
            } else {
                this.set('errorMessage', 'You have to fill all the fields');
            }
        },
        cancel: function() {
            this.transitionToRoute('friends');
        }

    }

});

person Anil S    schedule 21.09.2014    source источник
comment
Эмбер говорит вам, что свойство содержимого контроллера не установлено, вы установили модель в хуке модели маршрута? пожалуйста, добавьте код для вашего маршрута.   -  person MartinElvar    schedule 21.09.2014
comment
Я получил эту ошибку. Оказалось, что у меня дублированный контроллер.   -  person Stoutie    schedule 13.02.2015


Ответы (2)


Не используйте ObjectController. Используйте просто Ember.Controller.extend.

person Daniel Raja Singh    schedule 18.10.2014
comment
Я не думаю, что есть что-то особенно неправильное в использовании Ember.ObjectController; по крайней мере в текущей версии 1.8.0. Тем не менее, переход к контроллерам Ember 2.0 будет признан устаревшим, по существу замененным компонентами (я полагаю). - person wenincode; 25.11.2014
comment
Что ж, для плавного перехода на Ember 2.0 было бы разумно перейти на Ember.Controller и создать атрибут модели в компоненте. Но для текущих версий Ember.ObjectController должно подойти - person wenincode; 25.11.2014

Я вижу это в книге ember-cli-101. Я сам столкнулся с той же проблемой. Вероятно, вы неправильно устанавливаете атрибут модели в своем маршруте. Судя по книге, ошибка возникает на маршруте edit или new.

если ваш router.js выглядит так:

...
Router.map(function() {
  this.resource('friends', function() {
    this.route('new');
    this.route('show', { path: ':friend_id' });
    this.route('edit', { path: ':friend_id/edit' });
  });
});
...

маршрут friends/index должен установить атрибут model:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.find('friend');
  },
});

и маршрут friends/new должен установить model по-другому: import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.createRecord('friend');
  },
});

Для тех, кто не знаком с книгой (упомянутой выше), вопрос связан с кодом, который находится в книге, поэтому я сослался на нее. В большинстве случаев, если вы получаете эту проблему, это, вероятно, потому, что вы забыли или неправильно установили атрибут модели в соответствующем маршруте.

person wenincode    schedule 25.11.2014
comment
Я получаю эту ошибку на маршруте редактирования. Я определил модель в routes/friends/edit как таковую model: function(params) { return this.store.find('friend', params.friend_id); }, но все еще получаю сообщение об ошибке, когда нажимаю кнопку отмены на странице редактирования. Любые указатели? - person DavidVII; 12.01.2015
comment
@DavidBecerra маршрут редактирования на самом деле не нуждается в этой модели. routes/friends/edit.js должен иметь только export default Ember.Route.extend({}); хук модели, который вы показали выше, должен быть в routes/folders/index.js. Если это не решит проблему, у вас есть репозиторий кода, размещенный на github? - person wenincode; 12.01.2015
comment
Примерно через секунду после того, как я написал, я понял свою ошибку. В контроллере я использовал this вместо this.get('model'). Итак, у меня было this.transitionToRoute('friends.show', this) против this.transitionToRoute('friends.show', this.get('model')). - person DavidVII; 12.01.2015