如何使用 C3 创建 Dojo 小部件
How to Create Dojo Widget using C3
我找不到任何描述使用 C3 库创建 Dojo Widget 的示例。
在尝试创建小部件之前,我尝试创建了一个模块,并且成功了。
我是 Dojo 的新手...所以这是我尝试使用 c3 创建一个 Widget 的方法:
require([
"dojo/_base/declare", "dojo/parser", "dojo/dom-construct", "dojo/ready", "dojo/_base/window",
"dijit/_WidgetBase", "d3/d3", "c3/c3"
],function(declare, parser, domConstruct, ready, win, _WidgetBase, d3, c3){
declare("LineChart", [_WidgetBase], {
_options: {
bindTo : '#kpi1_chart',
data : {
columns : [
['data', 23, 50, 22, 41, 10]
]
},
zoom :{
enabled : true
}
},
_chart: undefined,
constructor: function(params, srcNodeRef){
if(params.hasOwnProperty('id'))
this._options.bindTo = "#"+params.id;
else
console.log("widget LineChart : id couldn't be found");
},
buildRendering: function(){
this._chart = c3.generate(this._options);
}
});
ready(function(){
parser.parse();
});
});
这是我在 HTML
中初始化小部件的方式
<div id="kpi1_chart" data-dojo-type="LineChart"></div>
当我启动页面时,div 标记只是空的,我没有收到任何错误,你能帮忙吗?
我让声明部分工作了。
问题是 c3.js 内部仅使用 "d3" 和 "c3" 作为模块名称,因此如果模块名称是 dojo 解析器,则会在路径中查找 'main.js' 文件名称不以 "d3/d3" 开头。
因此,为了使用独立的模块名称,您需要在 dojoConfig 变量中配置您的包,如下所示。
packages:[
{
name: "d3",
location: '//cdnjs.cloudflare.com/ajax/libs/d3/3.4.6',
main:"d3"
},
{
name: "c3",
location: '//cdnjs.cloudflare.com/ajax/libs/c3/0.4.10',
main:"c3"
}
这里的技巧是指定 main 属性。当您指定 main 属性时,如果在模块名称中仅指定 "d3"
,dojo 加载器将查找 d3.js
而不是 main.js
。
我可以让它与 declare 一起工作,并且正在调用 c3.generate(),但无法获得任何图表。我想我缺少一些 css 文件。我不太了解c3.js。
这是关于 dojo 加载程序如何工作的文档的link。
希望你能从这里走得更远。
我会回答我的问题:
为了能够在 dojo Widget 中显示 C3 图表,您必须在 startup() 函数中生成图表.
如果您尝试在 startup() 之前的另一个函数中生成图表 C3
在像 postCreate() 这样的小部件生命周期中,您不能将 c3 绑定到 DOM 元素(同一个小部件)因为这个元素还不存在。
我找不到任何描述使用 C3 库创建 Dojo Widget 的示例。
在尝试创建小部件之前,我尝试创建了一个模块,并且成功了。
我是 Dojo 的新手...所以这是我尝试使用 c3 创建一个 Widget 的方法:
require([
"dojo/_base/declare", "dojo/parser", "dojo/dom-construct", "dojo/ready", "dojo/_base/window",
"dijit/_WidgetBase", "d3/d3", "c3/c3"
],function(declare, parser, domConstruct, ready, win, _WidgetBase, d3, c3){
declare("LineChart", [_WidgetBase], {
_options: {
bindTo : '#kpi1_chart',
data : {
columns : [
['data', 23, 50, 22, 41, 10]
]
},
zoom :{
enabled : true
}
},
_chart: undefined,
constructor: function(params, srcNodeRef){
if(params.hasOwnProperty('id'))
this._options.bindTo = "#"+params.id;
else
console.log("widget LineChart : id couldn't be found");
},
buildRendering: function(){
this._chart = c3.generate(this._options);
}
});
ready(function(){
parser.parse();
});
});
这是我在 HTML
中初始化小部件的方式<div id="kpi1_chart" data-dojo-type="LineChart"></div>
当我启动页面时,div 标记只是空的,我没有收到任何错误,你能帮忙吗?
我让声明部分工作了。
问题是 c3.js 内部仅使用 "d3" 和 "c3" 作为模块名称,因此如果模块名称是 dojo 解析器,则会在路径中查找 'main.js' 文件名称不以 "d3/d3" 开头。
因此,为了使用独立的模块名称,您需要在 dojoConfig 变量中配置您的包,如下所示。
packages:[
{
name: "d3",
location: '//cdnjs.cloudflare.com/ajax/libs/d3/3.4.6',
main:"d3"
},
{
name: "c3",
location: '//cdnjs.cloudflare.com/ajax/libs/c3/0.4.10',
main:"c3"
}
这里的技巧是指定 main 属性。当您指定 main 属性时,如果在模块名称中仅指定 "d3"
,dojo 加载器将查找 d3.js
而不是 main.js
。
我可以让它与 declare 一起工作,并且正在调用 c3.generate(),但无法获得任何图表。我想我缺少一些 css 文件。我不太了解c3.js。
这是关于 dojo 加载程序如何工作的文档的link。
希望你能从这里走得更远。
我会回答我的问题:
为了能够在 dojo Widget 中显示 C3 图表,您必须在 startup() 函数中生成图表.
如果您尝试在 startup() 之前的另一个函数中生成图表 C3 在像 postCreate() 这样的小部件生命周期中,您不能将 c3 绑定到 DOM 元素(同一个小部件)因为这个元素还不存在。