【问题标题】:how can i reset chartjs object all instances and recreate it from scratch?我如何重置 chartjs 对象的所有实例并从头开始重新创建它?
【发布时间】:2015-05-23 15:29:35
【问题描述】:

我在前端使用backbonejs框架,在图表中使用chartjs, 所以为了简单起见:

  1. 我有一个可以完美呈现选项卡的视图,并且在每个选项卡中都有 里面有一个图表

  2. 第一次图表加载完美,一切顺利

  3. 当我再次单击某个选项卡时,它会重新呈现所有内容,包括从头开始的图表

问题:“切换回选项卡时图表不显示”

我的功能是这样的:

createChart: function(collection){
var that = this;

/* this is for the collection that i coming from an API and i am just    spliting it into two arrays */ 
var data1 = [],
data2 = [];
collection.each(function(model){
data1.push(model.get('count'));
data2.push(model.get('title'));
}) 



// chartjs code
var data = {
labels: data2,
datasets: [
{
label: "My Second dataset",
fillColor: "#007B9D",
strokeColor: "#00BFF3",
pointColor: "#00BFF3",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(151,187,205,1)",
data: data1
}
]};

//"this" is the reference to above declared variable 
this.ctx = document.getElementById("user-activity- chart").getContext("2d");  
this.myBarChart = new Chart(that.ctx).Bar(data);

console.log(this.ctx);
console.log(this.myBarChart);

},

我将第一次值记录到控制台中,如下所示

ctx 日志:CanvasRenderingContext2D {textBaseline: "alphabetic", textAlign: "start", font: "12px "Helvetica Neue", Helvetica, Arial, sans-serif", lineDashOffset: 0, miterLimit: 10…}

myBarchart 日志:Chart.Type.extend.ChartType {options: Object, chart: Chart, id: "chart-0", ScaleClass: function, datasets: Array[1]…}

我第二次(在切换选项卡后)将值记录到控制台中,如下所示

ctx 日志:CanvasRenderingContext2D {textBaseline: "alphabetic", textAlign: "start", font: "12px "Helvetica Neue", Helvetica, Arial, sans-serif", lineDashOffset: 0, miterLimit: 10…}

myBarChart 日志:Chart.Type.extend.ChartType {options: Object, chart: Chart, id: "chart-1", ScaleClass: function, datasets: Array[1]…}

我试过了

myBarchart.destroy()
myBarchart.clear()
myBarchart.update()

所有这些方法

还尝试在这里解决问题:https://gist.github.com/skhisma/5689383

请不要评判我,因为我是backbonejs的新手 在此先感谢

【问题讨论】:

    标签: javascript chart.js


    【解决方案1】:

    您必须在图表画布可见之后(即在您切换(并显示)选项卡之后)调用您的 createChart 函数。

    在此之前执行此操作将导致 Chartjs 将画布宽度和高度读取为 0,从而不显示图表。

    【讨论】:

    • 你的回答让我更进一步,我如何等待我的backbonejs视图在DOM中完全呈现,以便我的chartjs可以获得图表的画布。 . .我有时会遇到非常不寻常的行为,我的模板在 DOM 中完美呈现并绘制了图表,但同时当我切换选项卡时,我的模板等待视图完全执行其所有方法,而不是显示 html,所以在这种情况下,我的图表不会显示你能在这方面提供帮助吗,从过去 3 天开始一​​直坚持这一点,对不起我的英语不好
    • 对不起,伙计,不知道backbone.js。您可能想问一个带有该标签的问题 - 或者 stackoverflow.com/questions/9790361/… 是您正在寻找的东西(查看最高投票的答案)。你的英语很好,在你的句子之间加上句号:-)
    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 2013-07-17
    • 2022-07-09
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多