插入组件而不调用手柄助手或带有插座的控制器

时间:2015-06-23 23:56:48

标签: javascript ember.js ember-cli

我想使用把手助手(component "component-name"...component-name)将组件插入控制器模板而不是。或者通过插座中的控制器(或者只要解决方案适用于想要插入另一个组件的组件,那么它很好,我不认为插座可以在组件中工作)。

换句话说:

App.IndexController = Ember.Controller.extend({
  actions: {
     insertComponent: function() {
       var component = this.container.lookup("component:my-inserted", { singleton: false });
       component.set("layoutName", "components/my-inserted");

       // to be like handlebars-inserted component, what do i do here?
     }
  }
});

您可以使用此测试:http://emberjs.jsbin.com/popozanare/4/edit?html,js,output

为什么?

考虑一种清晰模态语法的方法,例如" openModal" Ember Cookbook中描述的语法:http://guides.emberjs.com/v1.10.0/cookbook/user_interface_and_interaction/using_modal_dialogs/

问题是源上下文丢失,因为模式在ApplicationRoute内。我想在调用模态时使用相同的语法,但保持层次结构。您可以使用https://github.com/yapplabs/ember-modal-dialog来保持层次结构,这需要变量的映射...我也不喜欢(但如果我没有其他选择,可能会实现)。

TD; LR:想要在调用控制器/组件(映射变量等)的控制器/组件中打开调用的控制器/组件(上下文)中的模态而没有脚手架。


编辑:

第二个想法,使用容器视图可能比映射变量更清晰,在此解决方案中找到:http://jsbin.com/hahohi/1/edit?html,js,output。仍然需要脚手架。谢谢@ user3568719。

1 个答案:

答案 0 :(得分:1)

这本食谱有点过​​时了,但是如果你正在寻找一种“干净”的方式来处理应用程序中的模态,我会建议指定的出口。

将其添加到您的应用程序或身份验证模板{{outlet "modal"}},当您想调出模态时,您可以捕获相应路径上的操作,然后像这样渲染到该命名插座:

this.render('your-desired-modal-template', {
  into: 'auth',
  outlet: 'modal'
});

如果您想解雇它,只需disconnectOutlet就像这样:

this.disconnectOutlet({
  outlet: 'modal',
  parentView: 'auth'
});

这是我们一直在努力的方式,我愿意接受建议/更好的方法。