1

例如,一个特定的应用程序状态可能有一个只呈现一些背景容器的主视图,

App.EditView = Ember.View.extend({
      templateName:  'edit-template',
 })


App.EditController = Ember.ObjectController.extend({
      title: 'Edit state',
})

当我导航到此状态时会实例化:

App.editRouter = Ember.Route.extend({

    route: '/edit',

    connectOutlets: function( router, context ){           
        router.get('applicationController').connectOutlet( 'mainOutlet', 'edit' )
    }
})

到达这里后,用户可以手动声明映射到新视图和控制器(和模型,但这里没有超级相关)的新 div 元素,新 div 可能是也可能不是由 editView 呈现的 div 的子元素。

我目前的做法

App.smallView1 = App.SmallView.create({ 
     controller: App.smallController1
}).append()

App.smallController1 = App.SmallController.create()

如您所见,这里没有任何内容表明视图和控制器声明的状态。我感到困惑的是:

这对视图-控制器与 EditView 和 EditController 的实例之间有什么关系?

pair和editRouter是什么关系?

是否应该有需要明确指定的依赖项?

4

1 回答 1

1

这对视图控制器似乎没有被路由器使用,所以你必须为它们创建一个路由并将出口与你的视图控制器对连接,除非你想将此视图附加到一个赢得不改变每条路线。它也与其他视图控制器对没有任何关系。

至于你的问题:

这对视图-控制器与 EditView 和 EditController 的实例之间有什么关系?

EditViewA:就目前而言,代码在小视图和控制器与编辑视图和控制器之间没有直接关系,但不同的是,这对EditController并不是“创建”的,而是“给定”给应用程序的,这将需要在需要时通过其自己的初始化逻辑 ( initialize) 或在需要时创建视图实例时注意实例化该类型。这对可能对路由器不利smallView1smallController1因为它们的实例名称以“1”结尾,我不确定 Ember 是否期望这样,但无论如何,这些都被实例化并作为“活动”对象直接附加到应用程序,使用路由器时不需要。这回答了你的问题了吗?

pair和editRouter是什么关系?

答:在您的代码中,editRouter定义了当您在该路线上时您的应用程序的状态(自Routeextends以来);State这意味着框架了解当您处于给定状态时,您需要发生一些特定的事情,例如,加载状态所需的视图,加载视图应显示的数据等......这是通过 完成的connectOutlet,所以对于此特定路线,您与smallView1smallController1除非您使用不同的签名手动connectOutlet指定viewClassand没有任何类型的关系。controller

是否应该有需要明确指定的依赖项?

答:是的。使用 时Router,您的应用程序必须有一个名为 的控制器ApplicationController,而当您调用 时connectOutlet,您传递的名称必须对应一个视图和控制器(我认为控制器可能不是我需要的,但我目前不确定)。因此,如果您说connectOutlet('about'),框架将查找AboutView按约定命名的视图,然后将实例化此视图并在容器视图中的适当插座上呈现。

如果需要,控制器将如何访问路由器?

答:在您的应用程序中的任何位置,您都可以通过App.router假设您的应用程序名为“App”并且您的路由器名为“Router”来访问路由器,因此在您的控制器中的任何方法中,您都可以,例如,使用路由器过渡:App.router.transitionTo('root.index.home')

于 2012-11-28T05:32:29.320 回答