【问题标题】:Emberjs Router: view property is not defined on associated controllerEmberjs 路由器:视图属性未在关联控制器上定义
【发布时间】:2012-09-11 09:44:49
【问题描述】:

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

请参阅参考:http://emberjs.com/guides/outlets/ 和这个: http://codebrief.com/2012/07/anatomy-of-an-ember-dot-js-app-part-i-redux-routing-and-outlets/

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

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

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

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

相关代码:

App.Router

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。

【问题讨论】:

    标签: ember.js ember-old-router


    【解决方案1】:

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

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

    来自 Ember 源代码的相关代码在这里:

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

    【讨论】:

    • 感谢您的澄清。 Mike Aski 说的是有道理的,你不应该尝试这样做,但如果你需要你可以这样做:App.get('router.applicationController.view')
    【解决方案2】:

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

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

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

    【讨论】:

    • 所以这条语句“将控制器的视图属性设置为新实例化的视图”。在here 中是完全错误的?还是指的是ApplicationController?
    • @oportocala 如您在此处看到的:github.com/emberjs/ember.js/blob/master/packages/ember-views/…, connectOutlets 将控制器设置为视图的上下文,但不将视图设置为控制器的属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多