如何将子资源的新路由呈现到应用程序侧栏出口?

时间:2015-06-03 23:17:12

标签: javascript ember.js outlet

我的项目是使用ember-cli和ES6导入方法的ember.js。

此问题是关于将子资源new的{​​{1}}路由呈现到应用程序dataset中,而数据集上的其他路由(显示)呈现为{{ outlet 'sidebar' }}

application.hbs

{{ outlet 'main' }}

router.js

<div class="col-xs-8">
  Outlet Main
  {{liquid-outlet "main"}}
</div>
<div class="col-xs-4">
  Outlet Sidebar
 {{liquid-outlet "sidebar"}}
</div>

routes / organization.js:

this.resource('organizations', function() {
    this.route('new');
    this.resource('organization', { path: '/:organization_id' }, function() {
      this.route('edit');
      this.resource('datasets', function() {
        this.route('new');
        this.resource('dataset', { path: '/:dataset_id' }, function() {
          this.route('edit');
        });
      });
    });
  });

目前,我在尝试此代码时遇到此错误:

import Ember from 'ember';

export default Ember.Route.extend({
  renderTemplate: function() {
    //render into application so organizations template doesn't show
    this.render('organization', {
      into: 'application',
      outlet: 'main',
      controller: 'organization'
    });
    // **** Not working but roughly what I want to do
    this.render('organization.datasets.new', {
      into: 'application',
      outlet: 'sidebar',
      controller: 'organization.datasets.new'
    });
    // ******
  }
});

我的理解是,任何子资源路线都应在父母路线中确定。真正? 如何让ember识别控制器?我猜我的语法错了...... 谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你试过这个吗?

this.render('organization/datasets/new', {
  into: 'application',
  outlet: 'sidebar',
  controller: 'organization/datasets/new'
});

使用&#34; /&#34;而不是&#34;。&#34;。

答案 1 :(得分:0)

就纯语法而言,我做错了是指定organization.datasets.new而不只是datasets.newthis.resources创建一个新的命名空间,因此您无需指定组织。事实证明this.resource已被弃用,无论如何都支持this.route

至于实际做我想做的事情,我将不得不压扁我的路线。当我找出一个按照我想要的方式工作的平面层次结构时,会发布更好的答案。