diff --git a/src/backbone.treemodel.js b/src/backbone.treemodel.js index 7b7347a..388750b 100755 --- a/src/backbone.treemodel.js +++ b/src/backbone.treemodel.js @@ -20,7 +20,6 @@ } }(this, function(root, BackboneTreeModel, _, Backbone) { - /** * @define {WrappedArray} array-like object that has special methods */ @@ -290,6 +289,11 @@ * @return TreeModel */ 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; @@ -422,5 +426,4 @@ TreeCollection.prototype.toArray = TreeCollection.prototype.flatten; return TreeModel; - })); diff --git a/test/backbone.tree_test.js b/test/backbone.tree_test.js index 9bfa93a..4884ef6 100755 --- a/test/backbone.tree_test.js +++ b/test/backbone.tree_test.js @@ -59,6 +59,30 @@ function runTests(BackboneTreeModel, expect) { }); }); + describe('After creating an empty tree', ()=> { + it('should add tree data correctly', ()=> { + 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', ()=> { it('Should return matched node', ()=> { var sidebar = tree.find('sidebar');