Ember.js中的TypeError和“无法调用未定义的方法'connectOutlet'”

时间:2013-07-02 15:50:40

标签: javascript ember.js handlebars.js

我正在尝试将Ember.js用于一个小型演示网站,以查看巨型无脊椎动物的gigapans(例如like this one)。每个网站按taxonomic rank分类一个网站,在这种情况下只有订单,家庭和属(因为它们都属于同一类,我们没有物种级别的标识)。这是一个小网站,只有13属。这是一个简单的工作示例,只有导航:

http://jsbin.com/ihapaw/10

主页列出了所有三个订单,每个订单下都是系列,然后是属。点击一下,您会看到我正在使用动态细分来获得遵循/ ORDER_ID / FAMILY_ID / GENUS_ID模式的URL方案。

我现在要添加的是一个菜单,用户可以从中选择跳转到任何等级或属。该设计需要一个菜单​​按钮,用户可以单击该按钮,div将显示所有订单,系列和属的列表,用户可以单击跳转到他们想要的页面。填充菜单面板,使其显示为onclick等等不是问题。我遇到的麻烦是使用菜单中的链接最终导致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 个答案:

答案 0 :(得分:0)

我看了你的代码,看起来不错。我相信这是我遇到的与ember嵌套路由相同的错误。正在进行讨论here。也许你应该插话。:)

我在那里发布了一个对我有用的临时修复,但我的路线只有2级深,所以它工作正常。你的嵌套深度为3级,修复可能不适合你。

解决问题的另一种方法是使用具有多个动态细分的单个资源。

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

您将失去控制器的灵活性,必须将所有内容放在一个控制器中,并且路由需要根据find存在的params进行更多工作。但它可能会奏效!