2014-03-12 48 views
1

當我運行我的應用程序,我不知道是什麼問題,我有這樣的錯誤..UndefinedError:列表對象沒有元素未定義

這裏是我的html代碼:

<select name="sel" onChange="myGraphFunction(this.value)"> 
{% for abs in absolute %} 
<option value="{{abs.id|safe}}">{{abs.imp}}</option> 
{% endfor %} 
</select> 

哪裏絕對是字典的數組一樣

[{'id': 1, 'imp': someName, 'd': [{'key': someKey, 'y': someValue},{'key': .., 'y': ..},...]}, {'id': 2, 'imp': .., 'd': [{...}]}, ...] 

這裏是我的javascript代碼,我得到了選擇的價值,所以我可以加載一些數據:

function myGraphFunction(dd){ 
var testdata = {{absolute[dd].d|safe}} 

nv.addGraph(function() { 

var width = 500, 
    height = 500; 

var chart = nv.models.pieChart() 
    .x(function(d) { return d.key }) 
    //.labelThreshold(.08) 
    //.showLabels(false) 
    .color(d3.scale.category10().range()) 
    .width(width) 
    .height(height) 
    .donut(true) 
.labelType("percent"); 

chart.pie 
    .startAngle(function(d) { return d.startAngle -Math.PI/2 }) 
    .endAngle(function(d) { return d.endAngle -Math.PI/2 }); 

    //chart.pie.donutLabelsOutside(true).donut(true); 

    d3.select("#test2") 
     //.datum(historicalBarChart) 
     .datum(testdata) 
    .transition().duration(1200) 
     .attr('width', width) 
     .attr('height', height) 
     .call(chart); 
nv.utils.windowResize(chart.update); 
return chart; 
}); 

問題出在我嘗試在testdata中加載絕對[dd] .d時。

我嘗試這樣做,而不是:

if(typeof dd === 'undefined'){ 
var testdata = {{absolute[0].d|safe}} 
}else{ 
var testdata = {{absolute[dd].d|safe}} 
} 

,但我得到了同樣的錯誤......

+0

你確定你沒有試圖訪問大於你的數組長度的索引嗎? – MamaWalter

回答

1

dd是一個Javascript的名字,但它是執行你的模板時未設置。 dd然後是Jinja2 Undefined對象,並且您的渲染失敗。

你會設置testdata列表中的功能之外,則是指它的函數內部:

var absolute = {{absolute|tojson|safe}} 
function myGraphFunction(dd){ 
    var testdata = absolute[dd].d 

我用tojson過濾器,以確保absolute正常變成有效的JavaScript文字。

+0

非常感謝!爲我工作得很好! – RubeInn

相關問題