我正在尝试将Ember.js用于一个小型演示网站,以查看巨型无脊椎动物的gigapans(例如like this one)。每个网站按taxonomic rank分类一个网站,在这种情况下只有订单,家庭和属(因为它们都属于同一类,我们没有物种级别的标识)。这是一个小网站,只有13属。这是一个简单的工作示例,只有导航:
主页列出了所有三个订单,每个订单下都是系列,然后是属。点击一下,您会看到我正在使用动态细分来获得遵循/ ORDER_ID / FAMILY_ID / GENUS_ID模式的URL方案。
我现在要添加的是一个菜单,用户可以从中选择跳转到任何等级或属。该设计需要一个菜单按钮,用户可以单击该按钮,div将显示所有订单,系列和属的列表,用户可以单击跳转到他们想要的页面。填充菜单面板,使其显示为onclick等等不是问题。我遇到的麻烦是使用菜单中的链接最终导致Ember错误,我无法理解。这是一个更新的演示:
在该演示中,假设蓝色区域是单击菜单按钮后出现的菜单面板。如果您打开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。
答案 0 :(得分:0)
我看了你的代码,看起来不错。我相信这是我遇到的与ember嵌套路由相同的错误。正在进行讨论here。也许你应该插话。:)
我在那里发布了一个对我有用的临时修复,但我的路线只有2级深,所以它工作正常。你的嵌套深度为3级,修复可能不适合你。
解决问题的另一种方法是使用具有多个动态细分的单个资源。
this.resource('species', { path: '/:order_id/:family_id/:genus_id'});
您将失去控制器的灵活性,必须将所有内容放在一个控制器中,并且路由需要根据find
存在的params
进行更多工作。但它可能会奏效!