javascript - 在 es6 模板字符串中传递对象
问题描述
我在下面的代码段中有这个
${res.result.map(resultObj =>
`<div class="col-sm-4 mb-4">
<a class="btn btn-primary" onclick="getEditable(resultObj)">Edit</a>
</div>`
)};
window.getEditable = (resultObj) => {
console.log(resultObj);
}
这会引发错误“结果”未定义。我应该如何使用 Template String 将结果对象传递给函数?
还想问一下是用window。是个好办法吗?
帮助将不胜感激
解决方案
似乎您希望能够让 html 反映可能更改的对象的状态,这通常意味着能够以某种方式观察该状态。这通常意味着使用库/框架,如 React 或 Vue,因为一旦项目超出了微不足道的规模,进行这种反应性并不容易。
这是一个演示问题的最小示例:
const el = document.getElementById('output')
const values = [
{
id: 1
},
{
id: 2
},
]
const log = text => {
console.log(text)
}
el.innerHTML = values.map(valueIter => `
<button onclick="log(valueIter)">
${valueIter.id}
</button>
`);
<button onclick="log(valueIter)">Test Button</button>
<div id="output"></div>
在上面的示例中,文本 valueIter
被放入onclick
函数调用中,即作为调用一部分的实际对象map
。将其替换为将传递id 属性${valueIter.id}
的文本。valueIter
但是,如果这种情况发生变化,我们仍然会得到原始值。
另一种方法是访问要记录的实际值:
const el = document.getElementById('output')
const values = [
{
id: 1
},
{
id: 2
},
]
const log = text => console.log(text)
el.innerHTML = values.map((value, i) => `
<button onclick="log(values[${i}])">
${value.id}
</button>
`)
values[0] = {
id: 99
}
<div id="output"></div>
您会注意到按钮的文本没有改变。这段代码中没有任何内容可以在原始值更改后强制 DOM 更新,这就是事情变得相当复杂的地方。基本上没有任何东西将 DOM 的输出绑定到它应该呈现的对象的状态。
推荐阅读
- javascript - 在 redux-saga-beginner-tutorial 中找不到模块“babelify”
- spring-mvc - 春季启动错误org.springframework.beans.factory.BeanCreationException数据源
- python-3.x - Pandas 在 CSV 中删除重复项
- php - Plesk 17 更改/添加用于网站更新的 httpdocs
- xml - Odoo 10:为自定义模块创建安全规则
- android - 具有多个待处理意图的 Android 警报管理器
- python - Python pandas 依赖于 numpy
- vba - MS Access 2010 VBA - 本地表的 SourceObjectType 是什么?
- git - 如何在 Git Rebase 期间签出特定提交
- git - osxkeychain 不存储 github 凭据?