控制器#需求 - 路由中有点?

时间:2013-08-31 20:54:32

标签: ember.js

我最近不得不将所有路由转换为深层嵌套版本。例如:pages.page成为books.book.pages.page。我正在做的一些连接是必要的。问题是我有一个控制器声明它需要另一个控制器。具体来说,它需要book控制器。但现在book控制器是books.book控制器。这提出了一个问题,因为此代码不再有效:

this.get('controllers.books.book');

现在它认为book只是books控制器的一个属性,而实际上它只是一个属性。我该如何解决这个问题?到目前为止,我已经尝试过这些方法,其中没有一个可行:

this.get('controllers').get('books.book');
this.get('controllers.`books.book`');
this.get("controllers.'books.book'");

编辑:我还应该指出,调用this.get('controllers').needs会给我一个数组:['application', 'books.book']

2 个答案:

答案 0 :(得分:1)

this.get('controllers.booksBook')将有效。

因为Ember在不同的地方使用了一些不同的命名约定,所以每当向应用程序容器注册一个对象时,它的名称就会被标准化。这可确保不同的查找格式始终以相同的方式解析。因此,您可以使用不同的查找格式来明确地引用属性路径中的控制器。

规范化将虚线路径和下划线字符串转换为camelized。正斜杠被保留。您可以查看packages/ember-application/tests/system/dependency_injection/normalization_test.js中的测试以获取更多详细信息。

答案 1 :(得分:0)

您是否只是使用this.get('controllers.pages');尝试访问PagesController?我相信你不必指定整条路径。

这是一个对我有用的简短例子:

App.Router.map(function() {
  this.resource('books', function() {
    this.resource('book', function() {
      this.resource('pages', function() {
        this.route('page', function() {

        });
      });
    });
  });
});

App.PagesController = Ember.ObjectController.extend({
});

App.BookController = Ember.ObjectController.extend({
  needs: "pages",
  pages: function() {
    return 'My PagesController, ' + this.get('controllers.pages')
  }.property()
});