【问题标题】:Grab Ember component's content in JS file在 JS 文件中抓取 Ember 组件的内容
【发布时间】:2014-11-26 17:24:37
【问题描述】:

假设我有一个 Ember 组件“blah”,我在我的模板中像这样使用它

{{#blah}}
  some content
{{/blah}}

我知道只要组件的 hbs 文件中有 {{yield}},就会呈现“一些内容”。但是有没有办法在组件的 js 文件中将“一些内容”作为字符串抓取?例如

App.BlahComponent = Ember.Component.extend({
  render: function(buffer) {
    var someContent = ???
  }
});

更新

只是为了澄清我想要做什么。我想创建一个列表视图组件。像这样的

{{#list-view}}
  <div> html for list item </div>
  <div> html for form </div>
{{/list-view}}

列表视图呈现多个列表项。当您单击列表项时,将显示表单。所有列表项的表单都相同,但绑定到当前列表项的模型。上面的 html 是模板的一部分,它是在服务器上生成的,同一个模板中可能有多个列表视图。 我要做的是获取组件渲染方法中 {{#}}{{/}} 标记之间的内容,对其进行解析并手动渲染列表视图。

【问题讨论】:

  • 解释你期望的最终结果可以更容易找到正确的答案。
  • someContent 来自哪里?是 JSON 还是 XML?您获得的答案的数量和质量与问题的质量直接相关。
  • 为什么需要解析someContent?你说这些是来自服务器的表单,我猜你已经收到了 HTML/DOM 元素。使用 JQuery 将其插入到div。我想是时候让你做一个了:emberjs.jsbin.com

标签: javascript ember.js


【解决方案1】:

您无法在模板中获取文本,除非您想破解它。

传递一个属性。

App.IndexController = Ember.Controller.extend({
  someContent: function() {
    return 'Lorem ipsum dolor sit amet.';
  }.property()
});    

<!-- in index template -->
{{#blah someContent=someContent}}
  {{someContent}}
{{/blah}}   

App.BlahComponent = Ember.Component.extend({
  render: function(someContent) {
    var someContent = this.get('someContent');
  }
});

【讨论】:

  • 不确定我是否理解您的回答。为什么我需要房产?我需要从 {{#}}{{/}} 标签之间获取 html 内容。
  • 我编辑了答案,尽管要点保持不变。
  • 遗憾的是这对我不起作用。在我的例子中,模板是在服务器上自动生成的,“someContent”是其中的一部分。有没有办法“破解我的路”?
  • 这不会改变任何东西,您可能是通过为控制器设置模型的路由接收到的,而控制器又可以将属性传递给模板。 emberjs.com/guides/getting-started/displaying-model-data
猜你喜欢
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多