2013-07-02 2 views
4

Я пытаюсь использовать Ember.js для небольшого демонстрационного сайта для просмотра гигапанов макропозвоночных (например, like this one). Каждый из них классифицирует один сайт на taxonomic rank, в этом случае только порядок, семья и род (так как все они одного класса и у нас нет идентификации на уровне видов). Это небольшой сайт, всего 13 родов. Вот простой рабочий пример ничего, кроме навигации:TypeError и «Невозможно вызвать метод connectOutlet« неопределенного »в Ember.js

http://jsbin.com/ihapaw/10

главной страницы содержит список всех трех заказов, и под каждым из них семья, а затем родов. Немного побейте, и вы увидите, что я использую динамические сегменты, чтобы получить схему URL, которая следует за шаблоном/ORDER_ID/FAMILY_ID/GENUS_ID.

То, что я хотел бы добавить сейчас, - это меню, из которого пользователь может выбрать переход на любой ранг или род. Дизайн вызывает кнопку меню, которую пользователь щелкнет, появится div со списком всех заказов, семейств и родов, и пользователь может щелкнуть, чтобы перейти на нужную страницу. Заполнение панели меню, заставляя ее отображаться на экране и т. Д., Не является проблемой. У меня возникли проблемы с тем, что использование ссылок в меню приводит к ошибкам Ember, которые я не могу понять. Вот обновленный демо:

http://jsbin.com/ihapaw/14

В этой демонстрации, притворяться синяя область меню панели, которая появляется после нажатия кнопки меню. Если вы откроете консоль JavaScript, а затем щелкните по полю «Brachycentrus» в синей области меню, а затем щелкните по полю «Tallaperla» (последний) в области меню, вы увидите следующие ошибки в консоли :

Error while loading route: TypeError {}

Uncaught TypeError: Cannot call method 'connectOutlet' of undefined

Для репро шагов выше, я вижу также в области содержимого ниже меню, после нажатия на род «Tallaperla», заказ правильно обновлено до «Plecoptera», но семьи и рода нет. Я предполагаю, что это ключ к проблеме, но понятия не имеет, что это значит. Возможно, я должен добавить, что проблема не только в том, что эти два рода вызвали проблему - легко перепрограммировать ошибки, если достаточно щелкнуть мышью в области меню. Этот пример воспроизведения был самым простым и быстрым, что я мог найти.

Я использую Ember 1.0.0-rc.6, Ember Data 0.13 и Handlebars 1.0.0-rc.4.

+1

У меня не было возможности заглянуть в ваш jsbin, но обычно, когда у меня возникает такая проблема, потому что ember ожидает, что все будет названо так, как я не ожидал. Настройка LOG_ACTIVE_GENERATION и LOG_VIEW_LOOKUPS даст вам лучшее представление о том, что происходит при нажатии на приложение, может помочь вам отслеживать это. См. Http://blog.emberwatch.com/2013/06/13/logging-the-magic-in-ember-js.html для получения дополнительной информации об этих параметрах –

+0

Спасибо, Майк, это полезно, я думаю. Я обновил jsbin (http://jsbin.com/ihapaw/16) с помощью операторов протоколирования и теперь вижу, когда вы нажимаете на первый род, отображая инструкции для порядка, семейства и рода. Но, щелкнув по второму роду, я вижу только оператор рендеринга для заказа, а затем он взрывается с помощью TypeError. –

ответ

0

Я посмотрел ваш код, и он выглядит хорошо. Я считаю, что это та же ошибка, с которой я сталкиваюсь с вложенными маршрутами с помощью ember. Об этом идет обсуждение here. Может быть, вам нужно перезвонить. :)

Я разместил там временное исправление, которое работало для меня, но мои маршруты были всего лишь на 2 уровня, поэтому он работал нормально. Ваше гнездование имеет 3 уровня глубины, это исправление может не сработать для вас.

Другой подход к вашей проблеме заключается в использовании одного ресурса с несколькими динамическими сегментами.

this.resource('species', { path: '/:order_id/:family_id/:genus_id'}); 

Вы потеряете гибкость в контроллерах, имея поставить все в одном контроллере, и маршрут должен был бы сделать больше работы в find, на основании которых params присутствуют. но это может сработать!

+0

Спасибо, Даршан, я попробую. Мой сайт действительно будет нуждаться в 4-м уровне (поскольку каждый род имеет несколько видов, таких как дорзальный, вентральный и т. Д.), Поэтому, если Эмбер не сможет справиться с глубоко вложенными маршрутами, тогда, вероятно, мне будет время ходить по магазинам вокруг чего-то другого. Но, спасибо за подсказку, я попробую. –

Смежные вопросы