From 715bafbe11cff9964c0375f2f7de9b37ded30eea Mon Sep 17 00:00:00 2001 From: Ashline Mpofu Date: Wed, 27 Sep 2017 12:15:55 +0200 Subject: [PATCH] modified add method to set root node correctly if tree was initialised with empty data --- src/backbone.treemodel.js | 5 +++++ test/backbone.tree_test.js | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/backbone.treemodel.js b/src/backbone.treemodel.js index c707e2d..e51adcb 100755 --- a/src/backbone.treemodel.js +++ b/src/backbone.treemodel.js @@ -196,6 +196,11 @@ * add child/children nodes to Backbone Collection */ add: function(node) { + if(!Object.keys(this.attributes).length) { + this.set(node); + if(node && node.nodes) this.add(node.nodes); + return this; + } if(node instanceof Backbone.Model && node.collection) node.collection.remove(node); this._nodes.add.apply(this._nodes, arguments); return this; diff --git a/test/backbone.tree_test.js b/test/backbone.tree_test.js index 56dcbb9..53edbac 100755 --- a/test/backbone.tree_test.js +++ b/test/backbone.tree_test.js @@ -59,6 +59,29 @@ function runTests(BackboneTreeModel, expect) { }); }); + describe('After creating an empty tree', function() { + it('should add tree data correctly', function() { + var newTree = new Backbone.TreeModel(); + newTree.add({ + id: 'title_2', + tagname: 'h1', + nodes: [ + { + id: 'anchor', + tagname: 'a', + nodes: [ + { tagname: 'span' } + ] + } + ] + }) + var anchor = newTree.find('anchor'); + expect(newTree.root().get('id')).to.be('title_2'); + expect(newTree.nodes().length).to.be(1); + expect(anchor).to.be.ok(); + expect(anchor.nodes().length).to.be(1); + }); + }); describe('#find', function() { it('Should return matched node', function() { var sidebar = tree.find('sidebar');