@@ -201,8 +201,7 @@ tl_tree <- tagList(
201
201
data = list (
202
202
data = d3r :: d3_nest(
203
203
rhd ,
204
- value_cols = " x" ,
205
-
204
+ value_cols = " x"
206
205
),
207
206
defaultProps = list (
208
207
' children' = ' children' ,
@@ -218,6 +217,7 @@ function(data, checked, indeterminate){
218
217
//data.checked = checked && !indeterminate;
219
218
console.log(data, checked, indeterminate);
220
219
this.checkedNodes = this.$refs.mytree.getCheckedNodes();
220
+ this.$emit('tree-checked');
221
221
}
222
222
"
223
223
)
@@ -235,3 +235,52 @@ browsable(
235
235
)
236
236
)
237
237
)
238
+
239
+
240
+ # add a d3 tree and make it respond to Vue tree
241
+ d3t <- networkD3 :: diagonalNetwork(
242
+ jsonlite :: fromJSON(
243
+ d3r :: d3_nest(
244
+ rhd ,
245
+ value_cols = " x"
246
+ ),
247
+ simplifyVector = FALSE ,
248
+ simplifyDataFrame = FALSE
249
+ )
250
+ )
251
+ # use onRender to add event handling
252
+ d3t <- htmlwidgets :: onRender(
253
+ d3t ,
254
+ "
255
+ function(el, x) {
256
+ var vue_tree = HTMLWidgets.find('.vue').instance;
257
+ vue_tree.$on(
258
+ 'tree-checked',
259
+ function() {
260
+ var myvue = this;
261
+ var checkedNodes = myvue.checkedNodes.map(function(d){return d.name});
262
+ var nodes = d3.select(el).selectAll('g.node');
263
+ debugger;
264
+ nodes.each(function(d) {
265
+ if(checkedNodes.indexOf(d.name) >= 0){
266
+ d3.select(this).select('circle').style('fill', 'gray');
267
+ } else {
268
+ d3.select(this).select('circle').style('fill', 'rgb(255,255,255)');
269
+ };
270
+ })
271
+ }
272
+ )
273
+ }
274
+ "
275
+ )
276
+ browsable(
277
+ attachDependencies(
278
+ tagList(
279
+ tags $ div(tl_tree ,style = " width:20%; float:left; display:block;" ),
280
+ tags $ div(d3t ,style = " width:70%; float:left; display:block;" )
281
+ ),
282
+ list (
283
+ element
284
+ )
285
+ )
286
+ )
0 commit comments