【问题标题】:How to render Ember component dynamically如何动态渲染 Ember 组件
【发布时间】:2015-05-18 06:42:28
【问题描述】:

在模板中使用{{component-name}} 时渲染组件效果很好。我想从带有动态参数的路由中渲染一个组件。这个我试过了

App.ApplicationRoute = Ember.Route.extend({
  init: function(){
      this.render("components/comp-two", {
        into: "application",
        outlet: "test"
      });

  }
});

它成功渲染了一个模板,但是组件的事件(init,didInsertElement)和动作不起作用。

如何使事件和动作起作用?

示例:http://emberjs.jsbin.com/badaku/1/

【问题讨论】:

  • 尝试在 renderTemplate 方法中编写此代码。
  • 如果我将方法替换为 renderTemplate,@Vaibhav 似乎不起作用。它两次提醒 temp-one,但不渲染任何内容。您可以通过编辑我的 jsbin 来提供一个示例吗?
  • 其实在路由这里,如果你定义了,那么只有模板被渲染,它不被认为是一个组件。你可以创建一个虚拟模板,在里面你可以使用你的组件。

标签: javascript ember.js ember-components


【解决方案1】:

如果你在 render 方法中给出了一些模板名称,ember 只会渲染那个特定的模板,它不会被认为是一个组件。你可以创建一个虚拟模板,在里面你可以使用你的组件。

我已经更新了你的 jsBin 示例 http://jsbin.com/pajirefeta/1/edit

【讨论】:

  • 问题是我想传递动态参数,如 {{comp-print "thisText"}} 和 thisText 是从服务器下载的,不能在模板中硬编码
  • 你想给你的组件传递一些参数吗?
  • 是的。我正在构建一个模态组件,它将被渲染到一个插座中。
  • 那么您可以将数据作为 {{comp-one compData="thisText"}} 传递并在组件内使用 compData 属性。
  • 您可以拥有一个属性,例如 myProp,它将获取动态数据(myProp = thisText),您可以将其分配给组件 {{comp-one compData=myProp}} 这里没有什么是硬编码的,你的动态属性也可以使用。请记住,不要在您的属性上加上引号,否则它将是一个字符串。
猜你喜欢
  • 2017-08-17
  • 2021-12-28
  • 1970-01-01
  • 2019-08-18
  • 2020-07-20
  • 2018-01-10
  • 2014-12-18
  • 1970-01-01
  • 2018-04-08
相关资源
最近更新 更多