我有一个自定义视图来显示页面上当前模型导航的面包屑,这是它在我的模板(这是单一模型模板)中的外观:
<div class="breadcrumbs">
{{view Mdm.BreadcrumbView}}
</div>
这是我渲染面包屑的视图:
App.BreadcrumbView = Ember.View.extend
templateName: 'breadcrumb'
penultimate: (->
content = @get('controller.content.self_and_ancestors')
content[content.length - 2]
).property('controller.content')
last: (->
content = @get('controller.content.self_and_ancestors')
content[content.length - 1]
).property('controller.content')
这是呈现数据的面包屑模板:
<ul class="breadcrumb">
{{#if view.penultimate}}
<li>{{#linkTo group view.penultimate}}Back{{/linkTo}}</li>
{{/if}}
<li>{{view.last.name}}</li>
</ul>
我的视图使用的模型 ( controller.content
) 具有嵌套数据self_and_ancestors
,其中包含我当前所在页面所需的面包屑数据。我只对查看该last
数组中的对象以及它之前的对象感兴趣以导航一页(这就是penultimate
andlast
正在显示的内容)。面包屑完美呈现,我可以正常导航,直到单击“返回”( penultimate
) 链接。当我遇到以下错误时:
Uncaught TypeError: Cannot read property 'length' of undefined
出于某种原因,内容未定义,但我不确定为什么。有什么想法吗?
编辑:
Welp,这里有一个例子http://jsbin.com/ejazin/2。然而,在这个例子中工作,这让我觉得别的东西可能是问题所在。基本上,每次您在我的应用程序中单击面包屑链接时,路由器find
都会根据 ID 执行 ajax 调用以查找该路由的当前组和所有子组。也许视图正试图在sub_groups
数据从服务器返回之前提取数据......有没有办法检查/防止这种情况?
编辑编辑:
这可能会传达我想要做的更多 - http://jsbin.com/obazus/1/。
编辑编辑编辑:
好的,问题肯定是视图penultimate
在模型中完成 ajax 请求之前正在渲染和调用。话虽这么说 - 确保模型的 ajax 请求完成后呈现的最佳方法是什么?