Отображение одной EmberJS DS.Model из FixtureAdapter Store в шаблоне

Я пытаюсь обновить Ember-Brunch (исходный репозиторий: https://github.com/icholy/ember-brunch) до новейших фреймворков EmberJS и EmberJS-Data. Текущая проблема, с которой я столкнулся, заключается в том, что я пытаюсь преобразовать исходную модель Боба в DS.Model, используя DS.FixtureAdapter в DS.Store. Но что бы я ни пытался, я сталкиваюсь с проблемами отображения данных. Вот пара попыток:

С маршрутом:

App.BobRoute = Ember.Route.extend({
    model: function() { 
        return App.Bob.find();
    }
});

Я получаю следующую ошибку:

Uncaught TypeError: невозможно вызвать метод hasOwnProperty со значением null

И если я перейду на этот маршрут:

App.BobRoute = Ember.Route.extend({
    setupController: function() {
        App.BobController.set('content', App.Bob.find());
      }
});

Я получаю следующие ошибки:

Uncaught TypeError: объект App.BobController не имеет метода 'set' app.js: 184 Uncaught TypeError: невозможно вызвать метод hasOwnProperty со значением null

Любые идеи?

Вы можете увидеть мою текущую работу https://github.com/seankeating/ember-brunch и мою попытайтесь сделать это в ветке DS.Model-Implementation-For-Using-Local-DSStore.

Магазин:

App.Store = DS.Store.extend({
  revision: 11,
  adapter: DS.FixtureAdapter.create()
});

Контроллер:

App.BobController = Em.ObjectController.extend({

});

Модель:

var App = require('app'),
    attr = DS.attr;

App.Bob = DS.Model.extend({

    firstName : attr('string'),
    lastName  : attr('string'),
    lyrics    : attr('string'),

    fullName: function(){
        return this.get('firstName') + ' ' + this.get('lastName');
    }.property('firstName', 'lastName')

});

App.Bob.FIXTURES = [{
    firstName: 'bob',
    lastName: 'marley',
    lyrics: 'no woman no cry!'
}];

Шаблон:

<h2>{{fullName}}'s page!</h2>
<button class="btn btn-success" {{action doClick target="view"}}>click me</button>
{{#linkTo home}}<button class="btn" {{action doHome}}>go back home</button>{{/linkTo}}

person Sean Keating    schedule 12.01.2013    source источник
comment
Можете ли вы предоставить трассировку стека, полученную с помощью Uncaught TypeError: Cannot call method 'hasOwnProperty' null. Это должно работать, но эта ошибка не предоставляет достаточно информации. Кроме того, вы используете отладочную сборку Ember? Он дает гораздо больше информативных ошибок, чем минифицированная сборка.   -  person Yehuda Katz    schedule 12.01.2013
comment
Я думаю, это просто потому, что вы пропустили идентификатор в объекте. Имейте в виду, что исходные фикстуры должны имитировать то, что дает серверная часть.   -  person sly7_7    schedule 12.01.2013
comment
@sly7_7 настройки идентификатора в FIXTURES действительно исправили проблему для обеих реализаций. Но у меня все еще есть проблема с отображением данных Боба. С помощью только .find() страницы отображаются, но шаблон не заполняется. Затем пробуем конкретный объект с его идентификатором App.Bob.find({id: 0}) или с его именем App.Bob.find({firstName: 'bob'}); шаблон не заполняется. Любые идеи здесь?   -  person Sean Keating    schedule 12.01.2013
comment
@YehudaKatz Я не использую отладочную сборку, я сейчас поищу последнюю. v › v1.0.0-pre.2-291-g4785901   -  person Sean Keating    schedule 12.01.2013
comment
@SeanKeating, можно ли предоставить jsfiddle или jsbin? Вы должны иметь возможность использовать это: jsfiddle.net/Sly7/beyGr в качестве начального, не уверен это точно такая же версия как у вас.   -  person sly7_7    schedule 12.01.2013
comment
Что-то, что может вам помочь: jsfiddle.net/Sly7/beyGr/5   -  person sly7_7    schedule 12.01.2013
comment
@sly7_7 Вот: jsfiddle.net/beyGr/7   -  person Sean Keating    schedule 12.01.2013
comment
@ sly7_7, может быть, я неправильно подхожу к этому, устанавливая содержимое, когда хочу просто показать один объект «боб» на этой странице? Раньше они отправляли модель через connectOutlet, но я хотел использовать хранилище данных для модели. github.com/icholy/ember-brunch/blob/master/ приложение/router.js. Я хотел выполнить аналогичную задачу с renderTemplate, но я не видел, как передать модель таким образом.   -  person Sean Keating    schedule 12.01.2013
comment
@SeanKeating Я думаю, что при непосредственном использовании модели действительно возникает проблема (обычно следует использовать динамический сегмент). Я пытался поиграть с хуком сериализации/десериализации, но я не могу заставить его работать... возможно, у Йехуды будет ответ   -  person sly7_7    schedule 12.01.2013
comment
Немного отладив, я обнаружил ‹.BobRoute:ember261› в маршруте toString... Думаю, это была предыдущая версия маршрутизатора. Можно ли будет обновить последний-мастер?   -  person sly7_7    schedule 12.01.2013
comment
наконец заработало: jsfiddle.net/Sly7/beyGr/18   -  person sly7_7    schedule 13.01.2013
comment
Вау, значит, идентификатор в FIXTURES должен был быть в кавычках, да?   -  person Sean Keating    schedule 13.01.2013
comment
Шон Китинг: Это известная проблема, о которой я забыл. Это должно быть исправлено как можно скорее.   -  person Yehuda Katz    schedule 13.01.2013
comment
@YehudaKatz приятно знать   -  person Sean Keating    schedule 13.01.2013
comment
@ sly7_7 ты хочешь написать ответ или мне?   -  person Sean Keating    schedule 13.01.2013
comment
Шон Китинг: На самом деле, спасибо sly7_7, это было исправлено в github.com/emberjs/data/commit. /   -  person Yehuda Katz    schedule 13.01.2013


Ответы (1)


До bc755f9 вам нужно было предоставлять ключи ваших фикстур в виде строк, именно так Ember Data хранит их внутренне.

Теперь вы можете использовать числа или строки в качестве идентификаторов приборов, и все будет работать как положено.

Кроме того, вы всегда должны использовать в разработке отладочную сборку Ember.js, которая предоставляет гораздо более качественные сообщения об ошибках, если что-то пойдет не так. Начиная с ea6922f, рабочая сборка Ember.js будет предупреждать вас, если вы запустив его в localhost или 127.0.0.1.

person Yehuda Katz    schedule 13.01.2013