Skip to content

Instantly share code, notes, and snippets.

@grapho
Last active October 9, 2015 22:20
Show Gist options
  • Save grapho/86dbc4079feac6393343 to your computer and use it in GitHub Desktop.
Save grapho/86dbc4079feac6393343 to your computer and use it in GitHub Desktop.
Crazy Nested Data
import Ember from 'ember';
export default Ember.Controller.extend({
appName:'Ember Twiddle',
crazyNestedData: [{
primaryData: "able-dataset_lvl-1",
nestedData: [{
primaryData: "able-dataset_lvl-2",
nestedData: [{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
}]
},{
primaryData: "able-dataset_lvl-2",
nestedData: [{
primaryData: "able-dataset_lvl-3",
nestedData: []
}]
}]
},{
primaryData: "able-dataset_lvl-1",
nestedData: [{
primaryData: "able-dataset_lvl-2",
nestedData: [{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
},{
primaryData: "able-dataset_lvl-3",
nestedData: []
}]
}]
}]
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{#if crazyNestedData}}
<table>
{{#each crazyNestedData as |data|}}
{{nest-group content=data tagName='tbody'}}
{{/each}}
</table>
{{/if}}
<br>
<br>
import Ember from 'ember';
export default Ember.Component.extend({
tagName: '',
groupIsExpanded: false,
didInsertElement() {
this._super();
let $element = Ember.$('.' + this.get('content.primaryData')),
$level = Number(this.get('content.primaryData').replace('able-dataset_lvl-', ''));
$element.find('td span:first').css('marginLeft', 16 * $level);
},
actions: {
toggleNestedData() {
this.toggleProperty('groupIsExpanded');
}
}
});
<tr {{action 'toggleNestedData'}}class={{content.primaryData}}>
<td>
<span>{{content.primaryData}}</span>
</td>
</tr>
{{#if content.nestedData}}
{{#if groupIsExpanded}}
{{#each content.nestedData as |data|}}
{{nest-group content=data}}
{{/each}}
{{/if}}
{{/if}}
{
"version": "0.4.11",
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.13.9/ember.debug.js",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/1.13.11/ember-data.js",
"ember-template-compiler": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.13.9/ember-template-compiler.js"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment