2016-11-05 68 views
0

我想用D3樹形圖來擴展ElasticUI項目。如何在(角)JS中格式化D3樹形圖的JS對象

Apolagia: 我知道ElasticUI折舊,因爲它不再維護,但它給我帶來了一個很長的路,讓我嘗試用我,在JavaScript和AngularJS共初學者做夢也想不到的方式彈性數據我直接跳了進去,只用了elasticsearch.js,並試圖爲它編寫一個「服務」。第二件事:我說我有一個Object,但它可能是JSON數據,一個Array或一個格式化的String,就我所知。瀏覽器控制檯說我的數據包含「對象」。

這是我的html的瘦身版本,只有樹狀圖。

<body eui-enabled="true" ng-app="moviesearch" ng-controller="IndexController" eui-index="indexName"> 
<div id="dendrogram" class="d3-chart"> 
    <eui-singleselect field="tweetMsg" size="10"></eui-singleselect> 
    <div class="nav nav-list" eui-aggregation="ejs.TermsAggregation('entries').field('tweetMsg').size(20)" eui-filter="ejs.TermsFilter('tweetMsg', bucket.key)" eui-enabled="filter.enabled" eui-filter-self="true"> 

      <eui-var eui-key="dendroSelectorChartConfig" eui-value='     
      { 
       "name": "Top Level", 
       "children": (treeMap(aggResult.buckets))      
      } 
      '/> 

      <div class="container well"> 
       <div d3-hierarchy="dendroSelectorChartConfig" depth="3"></div> 
      </div> 
    </div> 
</div> 

這裏是我的控制器的功能。它可能不應該在我的控制器應該嗎?我無法以其他方式使其工作。

$scope.treeMap = function mainTreeMapDiagramData(data) { 
var i; 
for(i = 0; i < data.length; i++) { 
    console.log("{\"name\":" + "\"" + data[i].key + "\"},"); 
    //  return "{\"name\":" + "\"" + data[i].key + "\"},"; 
    } 
}; 

你可能會笑,但其實這正確地記錄所產生的聚合條款對瀏覽器控制檯:

app.js:87 {"name":"https"},{"name":"t.co"},{"name":"movie"},{"name":"rt"}, {"name":"the"},{"name":"film"},{"name":"a"},{"name":"to"},{"name":"in"},{"name":"of"},{"name":"and"}, 

等等

但是,如果我註釋掉我的console.log ()並取消我的「返回」... D3不顯示任何內容。如果我將上面的列表直接複製到我的HTML中,它就可以工作。

我甚至還沒有開始考慮下一個級別 - 就像在孩子們的孩子那樣 - 我很樂意爲了獲得一個級別的工作。

謝謝您的閱讀!

編輯:如果有幫助,該項目是在這裏在線: https://analytics.molch.at/dendrogram.html

回答

0

這工作:

$scope.treeMap = function mainTreeMapDiagramData(data) { 

var i; 
arr = []; 
for (var key in data){ 
    if (typeof data[key] !== 'function') { 
      arr.push({ name: data[key].key }); 
    } 
} 

return arr; 

}; 

不過。單級樹狀圖並不是一個樹狀圖。現在我必須弄清楚如何在前面的術語聚集中爲每個桶添加termsAggregation。