跟随linkTo路由时,View属性返回'undefined'

时间:2013-07-01 16:48:55

标签: data-binding ember.js views

我有一个自定义视图来显示页面上当前模型导航的面包屑,下面是它在我的模板中的外观(这是奇异的模型模板):

<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对象以及它前面的那个对象感兴趣(这是penultimatelast正在显示的内容)。面包屑渲染完美,我可以正常导航,直到我点击“返回”(penultimate)链接。当我点击时,我收到以下错误:

Uncaught TypeError: Cannot read property 'length' of undefined 

由于某种原因,内容未定义,但我不确定为什么。有什么想法吗?

编辑:

Welp,这是一个例子http://jsbin.com/ejazin/2。然而,它正在这个例子中工作,这使我成为其他可能是问题的东西。基本上每次单击我的应用程序中的痕迹导航链接时,路由器会根据ID执行find,该ID进行ajax调用以查找该路由和所有子组的当前组。也许该视图试图在从服务器返回之前提取sub_groups数据...有没有办法检查/阻止它?

编辑编辑:

这可能会传达我正在努力做的事情 - http://jsbin.com/obazus/1/

编辑编辑编辑:

好的,问题肯定是视图在ajax请求在模型中完成之前呈现并调用penultimate。话虽如此 - 在模型的ajax请求完成后,确保它呈现的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

在仔细查看您的用例之后,可以查看新的路由器整容 here。它仍然没有大量文档记录,很快就会作为博客文章出现在ember网站上,但它已经合并到ember-latest中,因此您可以访问新的实现。特别是beforeModel&amp; afterModel钩子的接缝与你相关。

例如,在afterModel挂钩中,您可以执行以下操作:

App.PostsIndexRoute = Ember.Route.extend({
  afterModel: function(posts, transition) {
    if (posts.length === 1) {
      this.transitionTo('post.show', posts[0]);
    }
  }
});

希望它有所帮助。