簡體   English   中英

Javascript / D3.js中未定義或空引用的屬性“值”

[英]Property 'value' of undefined or null reference in Javascript/D3.js

我有一個相當大的程序的以下代碼(請參見下文)。

我有一個按鈕,該按鈕調用腳本/方法(updateChart())創建D3.js圖表​​。 如果我使用靜態變量初始化該圖表,則該圖表類將起作用。 但是,當我嘗試傳遞預先由javascript代碼創建的數據集時,創建D3圖表的類將引發以下錯誤:

SCRIPT5007:Unable to get property 'value' of undefined or null reference

問題是:如何擺脫這個錯誤,讓我的updateChart()方法很好地處理數據集?

奇怪的是,在將數據集變量傳遞給D3.js類之前,我立即在控制台中將對象打印出來。 在那里,一切看起來都很好,對於每個屬性,我都有一個值,並且對象正確。

我不明白的是,當對象通過updateChart()傳遞給D3.js類並在那里進行處理時,它似乎在( console.log()),該對象似乎很好。

//Button to create a D3.js chart with a custom dataset called waterdata
 <script>
     $("#testButton2").click(function () {
        /////
        console.log("click update chart 2")
        console.log(waterdata); //--> print JSO fine and without errors
        console.log(JSON.stringify(waterdata)); //--> Prints JSO fine truncated in IE but without error
        $(".chart").empty(); //--> clear chart container, if chart already there

        updateChart(waterdata, ".chart"); //--> here somehow the object seems broken

});
</script>


//The method / line of the error as shown in console
function add_to_stack(data, year, stack_year, direction,   query_direction, categories, count, x_pos, y_pos) {

 var new_list = [], current_data = {};

var fill_colors = { start: "#054696", in1: "#587521", in2: "#587521", out1: "#e63e2e", out2: "#e63e2e" };

current_data = data.filter(function (d) { return d.Year == year && d.Direction == query_direction });
for (c in categories) {
    //Für jede Kategorie eine Row
    if (direction == "down") {
        //für down y_pos Subtraktion erfolgt zuerst
        y_pos -= current_data[0][categories[c]];
    }
    new_list.push({  // --> this is indicated as error line in the console
        stack: stack_year + "_" + direction,
        increment: count,
        category: categories[c],
        value: current_data[0][categories[c]],
        position: y_pos,
        state: current_data[0].State,
        year: year,
        fill_color: fill_colors[query_direction],
        x_pos: x_pos
    });
    if (direction == "up") {
        //für up y pos anschliessend addieren
        y_pos += current_data[0][categories[c]];
    }
    count += 1;
};
return [new_list, count, y_pos];
}

這就是創建數據的方式。 小寫變量是在代碼中預先創建的值。 它們都應該正常工作,就像在將該數據集傳遞給D3方法之前在conosle中打印出來時,所有值都顯示得很好。

//structure of the data
//created by complex calculation in dataSetCreation.js
waterdata = [
    {
    Year: "2016",
    Direction: "start",
    State: "31.12.2015",
    Wes_3J: wes_3J_2015_c,
    Wes_2_3J: wes_2_3J_2015_c,
    Wes_1_2J: wes_1_2J_2015_c,
    Wes_0_1J: wes_0_1J_2015_c,
    Mod_3J: mod_3J_2015_c,
    Mod_2_3J: mod_2_3J_2015_c,
    Mod_1_2J: mod_1_2J_2015_c,
    Mod_0_1J: mod_0_1J_2015_c
},
{
    Year: "2016",
    Direction: "in1",
    State: "reopened",
    Wes_3J: wes_3J_off_2016_c,
    Wes_2_3J: wes_2_3J_off_2016_c,
    Wes_1_2J: wes_1_2J_off_2016_c,
    Wes_0_1J: wes_0_1J_off_2016_c,
    Mod_3J: mod_3J_off_2016_c,
    Mod_2_3J: mod_2_3J_off_2016_c,
    Mod_1_2J: mod_1_2J_off_2016_c,
    Mod_0_1J: mod_0_1J_off_2016_c
}
,
{
    Year: "2016",
    Direction: "in2",
    State: "new",
    Wes_3J: wes_3J_new_2016_c,
    Wes_2_3J: wes_2_3J_new_2016_c,
    Wes_1_2J: wes_1_2J_new_2016_c,
    Wes_0_1J: wes_0_1J_new_2016_c,
    Mod_3J: mod_3J_new_2016_c,
    Mod_2_3J: mod_2_3J_new_2016_c,
    Mod_1_2J: mod_1_2J_new_2016_c,
    Mod_0_1J: mod_0_1J_new_2016_c
}
  ,
{
    Year: "2016",
    Direction: "out2",
    State: "Verz",
    Wes_3J: wes_3J_verz_2016_c,
    Wes_2_3J: wes_2_3J_verz_2016_c,
    Wes_1_2J: wes_1_2J_verz_2016_c,
    Wes_0_1J: wes_0_1J_verz_2016_c,
    Mod_3J: mod_3J_verz_2016_c,
    Mod_2_3J: mod_2_3J_verz_2016_c,
    Mod_1_2J: mod_1_2J_verz_2016_c,
    Mod_0_1J: mod_0_1J_verz_2016_c
}
 ,
{
    Year: "2016",
    Direction: "out1",
    State: "Abs",
    Wes_3J: wes_3J_abs_2016_c,
    Wes_2_3J: wes_2_3J_abs_2016_c,
    Wes_1_2J: wes_1_2J_abs_2016_c,
    Wes_0_1J: wes_0_1J_abs_2016_c,
    Mod_3J: mod_3J_abs_2016_c,
    Mod_2_3J: mod_2_3J_abs_2016_c,
    Mod_1_2J: mod_1_2J_abs_2016_c,
    Mod_0_1J: mod_0_1J_abs_2016_c
}];

我再次從頭開始創建對象,並重新排列了腳本導入標簽,錯誤消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM