javascript - 如何在 Handlebars 模板上下文中传递 JQuery 实例?

标签 javascript jquery html handlebars.js

我想使用 Handlebars 插入嵌套元素,这些元素可以是 jQuery 元素,例如:

var ul = Handlebars.compile($('#ul').html());
var li = Handlebars.compile($('#li').html());

let el = $(li({slot: 'Hello World!'})).data('foo', Object([42]))

$('#main').append(ul({slot: el}))
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.1.2/handlebars.min.js"></script>

<div id="main" class="container">
</div>

<script id="ul" type="text/x-handlebars-template">
    <ul>
        {{{slot}}}
    </ul>
</script>

<script id="li" type="text/x-handlebars-template">
    <li>
        {{slot}}
    </li>
</script>

不幸的是,我正在为两个问题而苦苦挣扎:

  • Handlebars 期望上下文中有 html 内容,因此我松开了 data-foo
  • 使用 {{{slot}}} 可能不安全

还有什么选择?

最佳答案

要达到预期结果,请使用以下选项使用

  1. 使用 attr 而不是 data(),因为它只存储值,不会在 DOM 上设置属性

有关更多详细信息,请参阅此链接 - jQuery data attr not setting

  1. 拆分附加 ul 和 el

代码示例 - https://codepen.io/nagasai/pen/PvrLba?editors=1010

var ul = Handlebars.compile($('#ul').html());
var li = Handlebars.compile($('#li').html());

let el = $(li({slot: 'Hello World!'})).attr('data-foo', Object([42]))
$('#main').append(ul)
$('#main ul').append(el)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.1.2/handlebars.min.js"></script>

<div id="main" class="container">
</div>

<script id="ul" type="text/x-handlebars-template">
    <ul>
        {{{slot}}}
    </ul>
</script>

<script id="li" type="text/x-handlebars-template">
    <li>
        {{slot}}
    </li>
</script>

关于javascript - 如何在 Handlebars 模板上下文中传递 JQuery 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56494342/

相关文章:

jquery - 如何在不等待动画结束的情况下旋转图像?

javascript - 悬停时更改 HTML/CSS 框的尺寸

c# - 从 View 中调用 Controller 操作

javascript - 我怎样才能在这里制作一个 html 解决方案而不是使用 javascript hack?

html - 使用 CSS 部分重叠元素

javascript - 从 Node.js 中的 Array 对象中删除特定属性

javascript - 在悬停时突出显示一个元素

javascript - 如何从 $.each 操作中返回? (jQuery)

javascript - meteor JS : How to do I create event handler for multiple selectors?

javascript - 处理 Angular 4 生命周期 Hook