在呈现 d3 svg 对象之前更改 bootstrap 按钮文本
change bootstrap button text before rendering d3 svg object
我有旨在可视化一些复杂数据的代码。用户首先选择要加载的数据文件;单击加载按钮后,页面会生成一个 "plot" 按钮,该按钮带有一个带有函数 renderPlots()
.
的 onclick 事件处理程序
当用户点击 "plot" 按钮时,所有的绘图都会正确生成,我很高兴。但是,在数据集较大的情况下,绘图过程可能需要几秒钟,所以我想在生成绘图时将按钮文本更改为 "rendering..." 之类的内容,以便用户了解他们的绘图正在路上。
根据动态更改按钮文本的 bootstrap 文档,我尝试了类似
的方法
function renderPlots() {
$("#render").button("loading");
rest of code that does all the D3 plot generating...;
$("#render").button("reset");
}
上面代码的问题在于它实际上并没有首先更改按钮文本,它是异步执行的,我不知道如何在任何绘图之前强制按钮文本在屏幕上更改正式开始。
有什么想法吗?
实际上,如果我理解这个问题,内容是 运行 同步的——不是同步的——这就是为什么浏览器没有机会刷新DOM 在开始大处理任务之前使用新的按钮文本。如果您要 console.log
两次调用 .button()
之间某处的按钮文本,您会看到文本设置为 "loading"
;只是还没有出现。
如果是,则使用 setTimeout
将处理的开始延迟到下一个 "frame" 将解决问题:
function renderPlots() {
$("#render").button("loading");
setTimeout(function() {
// rest of code that does all the D3 plot generating...;
$("#render").button("reset");
}, 100); // even 0 will do the trick
}
我有旨在可视化一些复杂数据的代码。用户首先选择要加载的数据文件;单击加载按钮后,页面会生成一个 "plot" 按钮,该按钮带有一个带有函数 renderPlots()
.
当用户点击 "plot" 按钮时,所有的绘图都会正确生成,我很高兴。但是,在数据集较大的情况下,绘图过程可能需要几秒钟,所以我想在生成绘图时将按钮文本更改为 "rendering..." 之类的内容,以便用户了解他们的绘图正在路上。
根据动态更改按钮文本的 bootstrap 文档,我尝试了类似
的方法function renderPlots() {
$("#render").button("loading");
rest of code that does all the D3 plot generating...;
$("#render").button("reset");
}
上面代码的问题在于它实际上并没有首先更改按钮文本,它是异步执行的,我不知道如何在任何绘图之前强制按钮文本在屏幕上更改正式开始。
有什么想法吗?
实际上,如果我理解这个问题,内容是 运行 同步的——不是同步的——这就是为什么浏览器没有机会刷新DOM 在开始大处理任务之前使用新的按钮文本。如果您要 console.log
两次调用 .button()
之间某处的按钮文本,您会看到文本设置为 "loading"
;只是还没有出现。
如果是,则使用 setTimeout
将处理的开始延迟到下一个 "frame" 将解决问题:
function renderPlots() {
$("#render").button("loading");
setTimeout(function() {
// rest of code that does all the D3 plot generating...;
$("#render").button("reset");
}, 100); // even 0 will do the trick
}