質問概要
nestableを使ったツリーノードで、JSONからツリーを作成した後、
変更内容をJSONで取得したいが、取得できない。
取得には、
$('.dd').nestable('serialize');
を利用。
質問詳細
Electronを使って、簡単なエディタ(アウトラインプロセッサ)を作ろうとしています。
そのアウトライン部分に、ツリーを使いたく探していたときに、
nestableというフレームワークを見つけたのですが、
JSONから作成したツリーのJSONが、nestableにもともと有る$('.dd').nestable('serialize');
では取得できませんでした。
サンプルを見たところ、以下の図のように取得出来るようにはなっているようですが、その方法が分かりません。
アウトラインプロセッサなので、ツリーの生成と削除ができるように、
以下のような関数を組みましたが、生成は出来るのですが、取得ができません。
javascript
1 2<!-- ツリー部分 --> 3<div class="dd" id="TreeNode"> 4 <ol class='dd-list dd3-list'> 5 <div id="dd-empty-placeholder"></div> 6 </ol> 7 </div> 8 9 10<!-- JSON出力部分 --> 11<textarea id="nestable-output"></textarea> 12 13 14<script> 15/* JSONからTreeを作成 */ 16 function createTreeNode(json){ 17 18 var updateOutput = function(e) { 19 var list = e.length ? e : $(e.target), 20 output = list.data('output'); 21 if(window.JSON) { 22 output.val(window.JSON.stringify(list.nestable('serialize')));//, null, 2)); 23 } 24 else { 25 output.val('JSON browser support required for this demo.'); 26 } 27 }; 28 29 var obj = json; 30 var output = ''; 31 function buildItem(item) { 32 33 var html = "<li class='dd-item' data-id='" + item.id + "'>"; 34 html += "<div class='dd-handle dd3-handle'></div><div class='dd3-content'>" + item.title + "</div>"; 35 html += '<div>[<a href="javascript:addTreeNode('+ item.id +');">+</a>]</div>'; 36 37 38 if (item.children) { 39 html += "<ol class='dd-list'>"; 40 $.each(item.children, function (index, sub) { 41 html += buildItem(sub); 42 }); 43 html += "</ol>"; 44 } 45 46 html += "</li>"; 47 return html; 48 } 49 50 $.each(JSON.parse(obj), function (index, item) { 51 output += buildItem(item); 52 }); 53 54 $('#dd-empty-placeholder').html(output); 55 $('#TreeNode').nestable().on('change', updateOutput); 56 57 updateOutput( $('#TreeNode').data('output', $('#nestable-output')) ); 58 59 } 60</script>
エラー
TypeError: output is undefined TypeError: el[0] is undefined
まず、以下のスクリプトがいまいち理解できず躓いております。
javascript
1var updateOutput = function(e) { 2 var list = e.length ? e : $(e.target), 3 output = list.data('output'); 4 if(window.JSON) { 5 output.val(window.JSON.stringify(list.nestable('serialize')));//, null, 2)); 6 } 7 else { 8 output.val('JSON browser support required for this demo.'); 9 } 10 };
皆様のお知恵をお貸しください。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー