原版JS方式
您可以在这里使用innerHTML 来更改被点击元素的html 内容:
'dblclick .mycol' (event){
const target = event.currentTarget
target.innerHTML = target.innerHTML + "<strong>Test</strong>"
}
如果你想在事件中操作父级,你可以使用outerHTML
jQuery 方式
您使用 append 的方法需要 jQuery:
'dblclick .mycol' (event){
$(event.currentTarget).append($("<strong>Test</strong>"))
}
奖励:使用 jQuery 的优化
在流星火焰模板事件中,每个事件都有对模板实例的引用。这个模板实例保留了a reference to a jQuery object,它是它操作的 DOM 的一部分。
template.$ 返回那些相同元素的 jQuery 对象。 jQuery
对象类似于数组,具有由
jQuery 库。
模板实例用作选择器的文档根。
只有模板内的元素及其子模板可以匹配
选择器的一部分。
如果您的 seconds 事件参数是 namend templateInstance,您可以通过 templateInstance.$ 访问它。与
'dblclick .mycol' (event, templateInstance){
templateInstance.$(event.currentTarget).append($("<strong>Test</strong>"))
}
这节省了 jQuery 遍历整个 DOM 的需要,使其在处理大型文档时更加高效。
流星火焰之路
现在,当需要进行小规模操作时,这些都是巧妙的小技巧。但是,您可能希望您的应用具有可扩展性,并始终从 Blaze 渲染引擎中获益。
在这种情况下,您可能希望生成一种动态插入模板的方法。
考虑以下模板,该模板尚未导入:
rowcontent.html
<template name="rowcontent">
<strong>Test</strong>
<p>someData{{someData}}</p>
</template>
rowcontent.js
import './rowcontent.html' // currently just the import
您可以在运行时使用Blaze.renderWithData 将其动态添加到元素中,因此:
'dblclick .mycol' (event, templateInstance) {
import './rowcontent.js' // use the right path here
Blaze.renderWithData(Template.rowcontent, {someData: 'toBePassedToRowContent'}, event.currentTarget)
}
这将导致:
这是我的
测试
someDatatoBePassedToRowContent
这种方法的优点是您可以将数据传递给模板并保留所有反应性优势,因此可以像处理 Meteor 中的任何其他模板一样处理新添加的模板。
替代方案
使用Template.dynamic的声明性动态模板