【问题标题】:Ember.js: Loop over data from ArrayController in unassociated ViewEmber.js:在未关联的视图中循环来自 ArrayController 的数据
【发布时间】:2013-02-26 21:25:39
【问题描述】:

我设置了一个从 REST 端点提取帐户信息的路由:

Social.Router.map(function() {
    this.resource('accounts');
});

Social.AccountsRoute = Ember.Route.extend({
    model: function() {
        return Social.Account.find();
    }
});

Social.Account = DS.Model.extend({
    name: DS.attr('string'),
    username: DS.attr('string')
});

Social.AccountsController = Ember.ArrayController.extend();

我可以像这样在我的模板中循环这些数据:

<script type="text/x-handlebars" data-template-name="accountItem">
    {{#each account in controller}}
        <div class="avatar-name">
            <p>{{account.name}}</p>
            <p>{{account.username}}</p>
        </div>
    {{/each}}
</script>

我有另一个模板,我想在其中使用相同的帐户数据。如何从 View 中检索与 Account 模型相关的信息,以便可以在相应的模板中使用它?

Social.NewPostView = Ember.View.extend({
    tagName: 'div',
    accounts: function(){
        // return Account data here?
    }
});

更新 1

Here's a quick view of my UI

左侧是“实时”帐户数据。右侧是静态 HTML。我想重用右边左边的数据。有意义吗?

【问题讨论】:

  • 如果您将新视图嵌套在上面的视图下,您应该可以访问其上下文。你能更详细地描述你的用户界面和路线吗?您是否需要在嵌套视图中再次使用完全相同的“find.all”,还是只需要 UI 在显示其他内容时继续显示数组?

标签: ember.js handlebars.js


【解决方案1】:

您应该查看控制器的 needs 属性。这允许您指定您可以从当前控制器访问的控制器列表。

有关emberjs guides的更多信息

NewPostController

Social.NewPostController = Ember.ObjectController.extend({
    needs: ['accounts'],

    init: function(){
        this._super();
        console.log(this.get('controllers.accounts'))
    }
});


然后,从您的模板中:

<script type="text/x-handlebars" data-template-name="newPost">
    {{#each account in controller.controllers.accounts}}
        <div class="avatar-name">
            <p>{{account.name}}</p>
            <p>{{account.username}}</p>
        </div>
    {{/each}}
</script>


【讨论】:

  • 人力资源部。这似乎是一个很好的解决方案。我还没有Social.NewPostController,但我已经添加了它,但我什么也没得到。我尝试通过在控制台中访问Social.NewPostController.get('accounts') 进行调试,但我得到了一个 TypeError。我以前从未使用过需求选项,所以它可能比我意识到的要多。
  • @commadelimited : 如果你想从控制台调试:Social.__container__.lookup("controller:newPost").get('controllers.accounts')
  • 谢谢托马斯。我会看看你添加的其他行。
  • Thomas...您添加的那些额外更改起到了作用。非常感谢!如果不是太麻烦,你能解释一下这实际上在做什么吗?我想我明白了,但我想听听你的思考过程,以便我以后能更好地理解它。
  • 为了将来参考,Kasper Tidemann 的这篇文章对解释“需求”及其工作原理非常有帮助。不敢相信这么简单:kaspertidemann.com/…
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多