我目前遇到的问题是 javascript 似乎在 DOM 完全加载之前正在执行。我为什么这么说?采取以下代码:
var $r = $wnd.Raphael("container", 640, 480);
// Creates pie chart at with center at 320, 200,
// radius 100 and data: [55, 20, 13, 32, 5, 1, 2]
$r.piechart(320, 240, 100, [ 55, 20, 13, 32, 5, 1, 2 ]);
返回一个 Javascript 异常:'f is null'。这似乎表明无法识别容器名称。
如果指定绝对坐标,则饼图呈现良好。如果我在 Chrome 控制台中使用之前的代码(毕竟加载后),它会有效地将饼图加载到容器标签中。
我尝试将代码块包装在 JQuery 调用中:
$wnd.jQuery(function($) {
// Creates canvas 640 × 480 at 10, 50
var $r = $wnd.Raphael("container", 640, 480);
// Creates pie chart at with center at 320, 200,
// radius 100 and data: [55, 20, 13, 32, 5, 1, 2]
$r.piechart(320, 240, 100, [ 55, 20, 13, 32, 5, 1, 2 ]);
});
...而且没有骰子。
我可以尝试什么的任何想法?
编辑:
这是我调用 JSNI 方法的方式/位置。以下是相关的View代码。
public class WidgetSamplerView extends AbstractPanelView implements
WidgetSamplerPresenter.Display {
private FlexTable mainPanel;
public WidgetSamplerView() {
super();
mainPanel = new FlexTable();
HTML container = new HTML();
container.getElement().setAttribute("style",
"width:700px;height:700px");
container.getElement().setId("container");
mainPanel.setWidget(0, 1, container);
MyRaphaelWrapper.pieChart(); // JSNI Call
setWidget(mainPanel);
}
}