Maslosoft Binder Logo Maslosoft Binder Documentation
Knockout JS tracker and binding handlers with coffee and sugar

Fancytree Drag and Drop

Fancy tree drag'n'drop example.

Make sure that `children` field of model is dereferenced, see Maslosoft.Koe.TreeItem in dev/src/Model.coffee

When using multi-line binding definition the data property must be quited with '

There are two rendering related options used:

  • nodeIcon - To use custom icon, with also custom styling possible (and recommended). This allows responsive icon/title size.
  • nodeFolder - Same as `nodeIcon` but for nodes containing childs.
  • nodeRenderer - Custom node renderer. This renderer gets param as actual ko model, not fancytree node. So many possibilies are open here. See dev/src/TitleRenderer.coffee for example

Also responsive font size is used. Document font size: Increase / Decrease / Reset

Relevant code used in examples:

<div class="fancy-tree"
	data-bind="fancytree: {­
		'data': binder.model.Tree,
		nodeIcon: 'images/pdf.png', 
		folderIcon: 'images/zip.png', 
		nodeRenderer: Maslosoft.BinderDev.TitleRenderer, 
		on:{­
			'dblclick':binder.log, 
			'drop': Maslosoft.BinderDev.FancyTreeDropHandler
		­}, 
		dnd: true, 
		autoExpand: true
	­}">
</div>
<script>
	window.onload = (function () {­
		// Create tree structure
		var data = {­
			_class: 'Maslosoft.Koe.TreeItem',
			title: "Some container",
			children: [
				{­
					_class: 'Maslosoft.Koe.TreeItem',
					title: "Zero",
					description: "This can be also rendered via custom renderer"
				­},
				{­
					_class: 'Maslosoft.Koe.TreeItem',
					title: "One",
					description: "Another one with description",
					children: [
						{­
							_class: 'Maslosoft.Koe.TreeItem',
							title: "Two",
							description: "Hover for node tooltip - also added by node renderer"
						­},
						{­
							_class: 'Maslosoft.Koe.TreeItem',
							title: "Three",
							children: [
								{­
									_class: 'Maslosoft.Koe.TreeItem',
									title: "Three-Two"
								­},
								{­
									_class: 'Maslosoft.Koe.TreeItem',
									title: "Three-Three"
								­}
							]

						­},
						{­
							_class: 'Maslosoft.Koe.TreeItem',
							title: "Four"
						­}
					]
				­}
			]
		­};
		binder.model.Tree = new Maslosoft.Koe.TreeItem(data);
		ko.applyBindings({­model: binder.model­}, document.getElementById('ko-binder'));

		// Helper code
		binder.log = function () {­
			// Do not bind directly to `on` or will fail with `Illegal Invocation`
			console.log(arguments);
		­}
	­});
</script>