Javascript 为什么我的progressbar在加载数据时没有更改?
我正在使用我的Meteor应用程序。我有一个helper函数,它计算列表的长度并返回一个百分比。我的循环进度条有一个“数据父级”属性,它有一个由helper函数生成的值 这个值是有效的,并且随着数据的处理而改变,所以我知道helper函数不是问题所在。我还注意到,如果进入inspect元素并手动编辑数据父属性,则进度条不会更改值 有人能帮我找出为什么进度条没有反应性地改变吗 HTMLJavascript 为什么我的progressbar在加载数据时没有更改?,javascript,html,meteor-blaze,Javascript,Html,Meteor Blaze,我正在使用我的Meteor应用程序。我有一个helper函数,它计算列表的长度并返回一个百分比。我的循环进度条有一个“数据父级”属性,它有一个由helper函数生成的值 这个值是有效的,并且随着数据的处理而改变,所以我知道helper函数不是问题所在。我还注意到,如果进入inspect元素并手动编辑数据父属性,则进度条不会更改值 有人能帮我找出为什么进度条没有反应性地改变吗 HTML 我不是ProgressBar.js专家,但在阅读了API并对其进行了研究之后,我没有看到任何地方表明进度条使用了
我不是ProgressBar.js专家,但在阅读了API并对其进行了研究之后,我没有看到任何地方表明进度条使用了任何
数据
属性
使用此库时,您似乎有两个选项
.animate()
的连续调用将继续向前移动进度条(假设您传入的进度值越来越大).animate()
一次)
看起来您可能一直在尝试使用数据父对象
属性方法来实现这一点,但最终,您当前的代码只调用了.animate()
一次(请记住,onRendered
回调在呈现模板时只调用了一次)
我会这样做的
Template.Preset_settings.onRendered(function fabSettingOnRendered() {
// initialize your progress bar
var ProgressBar = require('progressbar.js')
var bar = new ProgressBar.Circle(container2, {
strokeWidth: 6,
easing: 'easeInOut',
color: '#FFEA82',
trailColor: '#eee',
trailWidth: 1,
svgStyle: null
});
// setup a reactive computation to update the progress bar
// this will re-run everytime your reactive datasource is updated
this.autorun(function() {
var readyList = this.state.get("readyList");
bar.animate(readyList.length / 12);
});
});
基本上,我使用.autorun()。注意,我假设(基于您的代码)您在模板的onCreated
回调中定义了一个名为state
的反应数据源(例如ReactiveVar
、ReactiveDict
,或其他一些)
您也不需要calcPercent
助手,可以将其删除
Template.Preset_settings.onRendered(function fabSettingOnRendered() {
var ProgressBar = require('progressbar.js')
var line = new ProgressBar.Line('#container2');
var dataid = document.getElementById('container2');
var bar = new ProgressBar.Circle(container2, {
strokeWidth: 6,
easing: 'easeInOut',
color: '#FFEA82',
trailColor: '#eee',
trailWidth: 1,
svgStyle: null
});
bar.animate(dataid.dataset.parent);
});
Template.Preset_settings.helpers({
calcPercent: function() {
const instance = Template.instance();
var readyList = instance.state.get("readyList");
return (readyList.length / 12);
}
});
Template.Preset_settings.onRendered(function fabSettingOnRendered() {
// initialize your progress bar
var ProgressBar = require('progressbar.js')
var bar = new ProgressBar.Circle(container2, {
strokeWidth: 6,
easing: 'easeInOut',
color: '#FFEA82',
trailColor: '#eee',
trailWidth: 1,
svgStyle: null
});
// setup a reactive computation to update the progress bar
// this will re-run everytime your reactive datasource is updated
this.autorun(function() {
var readyList = this.state.get("readyList");
bar.animate(readyList.length / 12);
});
});