簡體   English   中英

在EmberJS路由器上使用綁定?

[英]Using Bindings with the EmberJS Router?

我正在使用Ember.Router,我不知道的一件事是如何將對象綁定到Router實例化的控制器。

例如,這是一個控制器類(擴展的),路由器將為特定的路由(“頁面”)實例化該類,以及一個控制器對象(創建的),例如來處理應用程序外部的用戶管理任務路由器:

// controller used by Router to render the "page" route
App.PageController = Em.ObjectController.extend({
    content: Em.Object.extend({
        foo: 'bar'
    })
});

// global controller for users
App.usersController = Em.ObjectController.extend({
    content: Em.Object.extend({
        fooBinding: App.PageController.foo
        // the above will not work since Em.Router
        // instantiates the page controller dynamically
    })
});

因此,當路由器加載時,它將實例化App.PageController到App.router.pageController中,但這是在App.usersController已創建之后。 那么App.usersController如何在路由器管理的控制器中訪問數據?

有任何想法嗎?

您的樣本中有一些錯誤。

首先,永遠不要在聲明時直接使用Object值設置屬性:該值將在類的所有實例之間共享。 在這里,這並不重要 ,但這是一個壞習慣。 在這種情況下,設置PageController內容的好方法是在connectOutlet調用connectOutlet其綁定到路由器,如下所示:

connectOutlets: function (router) {
  var theContainerController = router.get('theContainerController'),
      objectWithFooBar = Ember.Object.create({
    foo: 'bar'
  });
  theContainerController.connectOutlet('page', objectWithFooBar);
}

第二個錯誤是usersController的命名:它應該是UsersController ,因為它是一個類, usersControllerinitialize調用期間作為usersController注入到路由器中。 讓用戶使用多元化和ObjectController似乎也很奇怪。 當然應該單數化...

最后,當然是最有趣的問題了,一旦您應用了前面的備注,就可以使用以下命令設置綁定:

App.UserController = Em.ObjectController.extend({
  fooBinding: 'App.router.pageController.foo'
});

App.router可以成為你調用之前建立App.initialize UserController使用全局符號直接訪問PageController絕對是很糟糕的選擇,但是在您的情況下,它確實可以完成工作。

一個絕對更好的解決方案也是將UserController connectOutlet的內容綁定在connectOutlet調用中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM