如何使用ember.js从当前上下文旁边的目标传递信息

时间:2012-09-11 07:23:28

标签: javascript ember.js

我有一个视图,它迭代一组对象并打印简单的打印资源名称和一个动作:

{{#each resource in resources}}
  <li><a {{action showResource resource}}>{{resource.name}}</a></li>
{{/each}}

资源来自具有以下结构的模型:

{
   supported: ['a', 'b', 'c'],
   resources: [
      {
         id: 1,
         name: 'resource 1'
      }
   ]
}

我现在的问题是,如何在showResource函数中获得“支持”属性? (showResource函数本身在路由器中定义并转换到新路由。)

...
showResource: Ember.Route.transitionTo('resource'),
...
resource: Ember.Route.extend({
route: '/resources/:resourceId',
connectOutlets: function(router, context) {
    router.get('projectController').connectOutlet('resource', TL.Resource.loadResource(context['id']));
}

在渲染的新视图中,我现在需要访问以前模型支持的属性。所以我打算以下面的方式在connectOutlet中传递它:

router.get('projectController')
      .connectOutlet('resource', {supported: ???, resource: TL.Resource.loadResource(context['id'])});

我的问题是如何访问受支持的属性?

1 个答案:

答案 0 :(得分:1)

一种方法可能是将资源和受支持的数组合并为循环中“上下文”的1个对象。

var Resource = Ember.Object.extend({
    resource: null,
    supported: null
});

然后在你的视图/控制器中定义:

combinedResources: function() {
    var combined = [];
    this.get('resources').forEach(function(resource) {
        combined.push(Resource.create({
            resource: resource,
            supported: supported
        }))
    });

    return combined;
}.property('resources', 'supported')

现在在模板中

{{#each resource in combinedResources}}
    <li><a {{action showResource resource}}>{{resource.resource.name}}</a></li>
{{/each}}