0

我正在尝试将我的应用程序移至使用“插座”的新 Emberjs 路由器组件。

参见参考文献:http ://emberjs.com/guides/outlets/和这个: http ://codebrief.com/2012/07/anatomy-of-an-ember-dot-js-app-part-i-redux-路由和出口/

我如何理解它的工作原理:当您使用字符串连接插座时,会发生以下事情

  1. Ember 在 App 上查找视图定义并实例化它
  2. Ember 在 App 上查找控制器定义并创建它的实例
  3. 像这样将两者相互挂钩:设置视图控制器属性和设置控制器视图属性

--- 在最后一步之前运行良好。我似乎无法在控制器上设置视图属性。

JSBin 这里:http: //jsbin.com/ekekir/40/edit

相关代码:

应用路由器

App.Router = Ember.Router.extend({
  root: Ember.Route.extend({
    state1: Ember.Route.extend({
      route: '/state1',

      connectOutlets: function (router) {
        router.get('applicationController').connectOutlet('state1')
      }
    })
  })
});

控制器和视图

App.State1View = Ember.View.extend ({ 
  templateName: 'state1',
  submit: function () {
    this.get('controller').doLogView();
    return false;
  }
});

App.State1Controller = Ember.Controller.extend({
  doLogView: function () {
    console.log('Getting controller view:');
    console.log(this.get('view'));
  }
});

最后它返回一个大空值。

我做错了什么还是这就是它应该的方式?

顺便说一句:这是使用 ember-1.0.pre。

4

2 回答 2

3

Mike Aski 是正确的,控制器不应该知道视图。

但是,当前的实现实际上确实在控制器上设置了视图,而不是您期望的控制器。在上面的示例中, 的view属性applicationController将设置为 的实例State1View

来自 Ember 源代码的相关代码如下:

https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/system/controller.js#L140

于 2012-09-12T16:47:04.170 回答
2

这是正常行为,因为控制器不必知道呈现其内容的视图。你会有一个依赖循环(和一个破碎的设计......)。

依赖关系遵循链:V -> C -> M

而且,控制器注入一次,每次显示时都会创建视图。

于 2012-09-11T13:21:14.363 回答