Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在组件中呈现动态HTML?_Javascript_Ember.js_Handlebars.js - Fatal编程技术网

Javascript 如何在组件中呈现动态HTML?

Javascript 如何在组件中呈现动态HTML?,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,我有下面的Ember handlebar模板,我想动态地将它呈现给DOM,包括onclick事件监听器。如何在EmberJS中实现它 hello.js export default Ember.Component.extend({ didInsertElement() { var message = ` <p>Hello World!</p> <a onclick={{action "handl

我有下面的Ember handlebar模板,我想动态地将它呈现给DOM,包括onclick事件监听器。如何在EmberJS中实现它

hello.js

export default Ember.Component.extend({
    didInsertElement() {
        var message = `
            <p>Hello World!</p>
            <a onclick={{action "handleOpenUrl"}}>Learn More</a>
        `;
        this.set('message', message);
    },

    actions: {
        handleOpenUrl() {
            //open url code
        }
    }
});
{{{message}}}
DOM中的预期输出

<p>Hello World!</p>
<a>Learn More</a>
你好,世界

了解更多

当我点击了解更多信息时,
handleOpenUrl
应该被调用

你应该有这样的功能:

你好 你好,哈佛商学院 如果要呈现不同的HTML,则需要使用
yield

{{#if showMessage}}
   {{yield}}
{{/if}}
这将允许您以以下方式使用组件:

{{#hello showMessage=true}}
   <p>Hello World!</p>
   <a {{action "handleOpenUrl"}}>Learn More</a>
{{/hello}}
{{{#hello showMessage=true}
你好,世界


或者a是一种方式,而不是一个组件。

您应该有更像这样的东西:

你好 你好,哈佛商学院 如果要呈现不同的HTML,则需要使用
yield

{{#if showMessage}}
   {{yield}}
{{/if}}
这将允许您以以下方式使用组件:

{{#hello showMessage=true}}
   <p>Hello World!</p>
   <a {{action "handleOpenUrl"}}>Learn More</a>
{{/hello}}
{{{#hello showMessage=true}
你好,世界


或者a不是组件。

首先,你的问题是错误的:你不会问你是否可以渲染动态HTML,而是问你是否可以渲染动态把手!简短回答:没有

长答覆:

您的主要误解可能是您认为ember在某个时候正在浏览器中渲染把手字符串。不是! Ember在编译时编译手柄以闪烁VM字节代码。Handlebar编译器或Handlebar模板将永远不会发送到浏览器。所以没有什么可以解析把手

您想要的可能很容易实现,但这是典型的X/Y问题情况


还要注意,呈现HTML(这是可能的)存在安全风险。我建议你问一个关于如何做你真正想做的事情的新问题,而不要专注于解决问题的具体方法。

首先,你的问题是错误的:你不会问你是否可以渲染动态HTML,而是问你是否可以渲染动态把手!简短回答:没有

长答覆:

您的主要误解可能是您认为ember在某个时候正在浏览器中渲染把手字符串。不是! Ember在编译时编译手柄以闪烁VM字节代码。Handlebar编译器或Handlebar模板将永远不会发送到浏览器。所以没有什么可以解析把手

您想要的可能很容易实现,但这是典型的X/Y问题情况


还要注意,呈现HTML(这是可能的)存在安全风险。我建议你提出一个新问题,即如何做你真正想做的事情,而不是专注于解决问题的具体方法。

你想实现什么?看起来您试图绕过ember的模板引擎glimmer。我正在尝试在组件上动态地将ember handlebar模板(带有onclick操作)呈现给DOMstartup@jelhan只是为了更好地理解你对它的想法是错误的,这不是余烬的工作原理。HTML应该在
模板.hbs
中,而不是在js文件中。虽然这不是标准的余烬方法,但也不应该被认为是完全错误的,因为有些情况下需要它。我在这里概述了如何处理它:你想要实现什么?看起来您试图绕过ember的模板引擎glimmer。我正在尝试在组件上动态地将ember handlebar模板(带有onclick操作)呈现给DOMstartup@jelhan只是为了更好地理解你对它的想法是错误的,这不是余烬的工作原理。HTML应该在
模板.hbs
中,而不是在js文件中。虽然这不是标准的余烬方法,但也不应该被认为是完全错误的,因为有些情况下需要它。我在这里概述了如何处理它:我的信息将不断变化,而且是动态的。在其他地方,我将显示一些其他消息或不同的链接(可能是带有
h1
标记的不同模板,等等)。在这种情况下,解决方案是什么?我是否可以从JS动态呈现
{{{hello showMessage=true}}
?为什么在这里使用组件?组件用于渲染公共特征。如果没有什么共同点,组件就会变成浪费时间。我的消息将发生变化,并且是动态的。在其他地方,我将显示一些其他消息或不同的链接(可能是带有
h1
标记的不同模板,等等)。在这种情况下,解决方案是什么?我是否可以从JS动态呈现
{{{hello showMessage=true}}
?为什么在这里使用组件?组件用于渲染公共特征。如果没有什么共同点,组件就变成了浪费时间
{{#hello showMessage=true}}
   <p>Hello World!</p>
   <a {{action "handleOpenUrl"}}>Learn More</a>
{{/hello}}