当同一个模板的两个实例在应用程序的多个地方使用时,Ember的奇怪行为

Ember strange behavior when two instances of same template used in multiple places in application

本文关键字:方使用 Ember 同一个 实例 两个 应用程序      更新时间:2023-09-26

请看一下这个JSBin1。我对index模板中的render使用相同的模板,并在ColorsRouterenderTemplate函数中手动渲染。单击More Colors链接不会呈现我在ColorsRoute模型钩子中返回的颜色列表。现在,如果您将render 'colors-list model更改为render colors-list2 model,就像我在这里所做的那样,一切都像我期望的那样工作。两者之间的唯一区别是,在JSBin1中,我只使用colors-list模板,但在第二个工作示例中,我有一个render模板和一个相同的、不同命名的ColorsRoute模板。

代码示例虽然在JSBin中微不足道,但却是我在一个更大的应用程序中所做的事情的精确提取。这个应用程序有一堆小部件,我用同一个templates中的多个命名出口来表示它们。我手动渲染到这些出口,就像我在ColorsRoute renderTemplate钩子中的JSBin中所做的那样。我进行手动呈现,以便在发生某些事件时,在route上定义actions,这将允许我在对REST API进行ajax调用后动态替换outlet的内容。

这种行为的解释是什么?

它与正在创建的控制器更相关,而不是模板。从技术上讲,这两者都不应该起作用,但似乎有一些路径如果你没有定义一个控制器,而且那个类型的控制器还没有被创建,创建它,并使用当前的控制器/模型作为支持它的模型。

当你使用渲染的时候,你应该提供一个控制器如果你希望它有那个控制器作为后台控制器。

  renderTemplate: function(controller, model){
    this.render();
    this.render('color-list', {
      outlet: "named", 
      into: 'colors',
      controller: controller
    });
  }
http://emberjs.jsbin.com/cevagocekofu/3/edit