2015-06-05 21 views
0

我找不到任何使用C3庫描述創建Dojo Widget的示例。如何使用C3創建Dojo Widget

在試圖創建一個小部件之前,我試着創建一個模塊,它工作。

我是新使用Dojo ...所以這裏是我試圖創建一個Widget與C3:

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標籤只是空的,我沒有得到任何錯誤,你能幫忙嗎?

+0

我認爲你需要在構造函數的開頭調用'this.inherited(arguments);'。你也可以在dojoConfig中正確定義d3和c3包。 – frank

+0

我在構造函數的開頭添加了'this.inherited(arguments);',並且對於_dojoConfig_,我認爲它設置的很好,因爲我可以使用_c3_作爲dojo模塊。 我做了一個小實驗,將前一個模塊包裝在一個對象中(使用_declare_,而不從_WidgetBase_繼承),並且它不工作... 也許_c3_不喜歡什麼時候用_declare_包裝? – Souf

回答

1

我會回答我的問題:

爲了能夠表現出C3排行榜Dojo小部件,你必須產生在啓動()功能圖。

如果您嘗試生成圖表C3之前啓動()postCreate()例如小部件生命週期 是不是還有另外的功能,你不能綁定C3 DOM元素(的相同的小部件),因爲這個元素還不存在。

1

我得到了申報部分的工作。

問題是,內部c3.js僅使用「d3」和「c3」作爲模塊名稱,因此如果模塊名稱不先於「d3」,dojo解析器將在路徑中查找「main.js」文件/ 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" 

     } 

訣竅在這裏被指定主要屬性。當您指定主屬性時,如果在模塊名稱中只指定"d3",則dojo加載程序將查找d3.js而不是main.js

我可以使用聲明和c3.generate()被調用,但無法獲取任何圖表。我想我錯過了一些CSS文件。我對c3.js瞭解不多。

以下是文檔中的link以及dojo裝載程序的工作原理。

希望你能從這裏進一步瞭解它。

+0

其實我在dojoConfig包中使用完全相同的東西,我的需求也在工作......問題是c3.js無法執行任何操作,它就像小部件甚至不在那裏。我在github上發佈了一個[issue](https://github.com/masayuki0812/c3/issues/1197),如果我得到一個答案,我會發布它 – Souf