1

最近、すべてのルートを深くネストされたバージョンに変換する必要がありました。例:pages.pageになっbooks.book.pages.pageた。私が行っていたリンクのいくつかに必要でした。問題は、別のコントローラーが必要であることを宣言するコントローラーがあることです。book具体的には、コントローラーが必要でした。しかし、今ではbookコントローラーはbooks.bookコントローラーです。このコードが機能しなくなったため、これにより問題が発生します。

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

bookこれはコントローラーの単なるプロパティであると考えていますがbooks、実際にはすべて 1 つのプロパティです。この問題を解決するにはどうすればよいですか? これまでのところ、これらの方法を試しましたが、どれも機能しません:

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

this.get('controllers').needs編集:呼び出しによって配列が得られることも指摘する必要があります: ['application', 'books.book']

4

2 に答える 2

1

this.get('controllers.booksBook')動作します。

Ember はさまざまな場所でいくつかの異なる命名規則を使用しているため、オブジェクトがアプリケーション コンテナーに登録されるたびに、その名前は正規化されます。これにより、異なるルックアップ形式が常に同じ方法で解決されることが保証されます。結果として、別のルックアップ形式を使用して、プロパティ パスでコントローラーを明確に参照できます。

正規化により、ドット パスとアンダースコア文字列がラクダ化された文字列に変換されます。スラッシュは保持されます。packages/ember-application/tests/system/dependency_injection/normalization_test.js詳細については、テストを参照してください。

于 2013-09-01T04:24:32.717 に答える
0

を使用するだけで PagesController にアクセスしようとしましたthis.get('controllers.pages');か? パス全体を指定する必要はないと思います。

これが私のために働いた短い例です:

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()
});
于 2013-08-31T22:10:28.723 に答える