具有真实视图的itemController而不是虚拟视图emberjs

时间:2014-04-21 08:09:54

标签: ember.js

我有一个{{#each}}手柄帮助器,带有arrangeContent我就这样用它

{{#each arrangedContent itemController='people'}}
  {{content.name}}
{{/each}}

itemController的功能是为每个项目生成虚拟视图

我想在点击内容名称时弹出一个可以通过视图完成的新窗口。 但由于我有虚拟视图,我无法做到。

MY ATTEMPT 我想象的是,如果我创建一个新视图并在{{view" App.PeopleItemView"然后它可能会起作用

所以它确实

{{#each arrangedContent itemController='people'}}
      {{view 'App.PeopleItemView'}}
{{/each}}

我的人物项目视图就像这样

App.PeopleItemView = Em.View.extend({
  layoutName: 'people_item',
});

但它不会这样。我仍然使用虚拟视图

更新 我在peopleController中创建了一个名为url的属性,如下所示

url: function(){
        var pathArray = window.location.href.split('/');
        pathArray.pop();
        var newPathname = "";

        for ( i = 0; i < pathArray.length; i++ ) {
        newPathname += pathArray[i];
        newPathname += "/";
        };
        newPathname+="people/"+this.get('content.id');

        return newPathname;
    }.property('content'),

然后按照@ppcano

的建议访问它

3 个答案:

答案 0 :(得分:0)

我认为你得到itemController错误,因为它不应该产生任何东西,而是将项目包装在&#39;内容中。

来自Ember.ArrayController

  

有时你想在体内显示计算属性   一个依赖于内容中基础项的#each助手,但是   这些物品上没有。为此,请将itemController设置为   将要换行的控制器的名称(可能是ObjectController)   每个项目。

利用itemController项可以具有计算属性等

另一方面,我相信你应该使用View&#39; templateName属性而不是layoutName。请参阅:defining a view

答案 1 :(得分:0)

如果我没有错,您的内容正确显示,那么您可以创建href链接,其href值取决于您的个人内容。

 {{#each item in model}}
      <a target="_blank" href="{{unbound item.personUrl}}">{{item.name}}</a>
 {{/each}}

如果要重定向到应用程序路由,请使用link_to helper。目前,它不支持设置目标属性,但Feature Pull Request正在进行中..

答案 2 :(得分:0)

实现此目的的最简单方法(如果我理解正确)是使用each这样:

{{each arrangedContent itemView="item"}}

这将遍历您的arrangedContent,并为每个项目提供App.ItemView的实例。

然后,您可以在视图模板中按{{view.content}}访问该项目。

请查看http://jsbin.com/gufid/edit示例。