ユーザーが葉をドラッグ アンド ドロップできるツリーのような構造を作成したいと考えています。次のような出発点があります。
HTML
<div ng:controller="controller">
<ul ui-sortable ng-model="items" ui-options="{connectWith: '.item'}" class="item">
<li ng-repeat="item in items" class="item">
{{ item.name }}
<ul ui-sortable ng-model="item.children" ui-options="{connectWith: '.item'}" class="item">
<li ng-repeat="item in item.children" class="item">{{ item.name }}</li>
</ul>
</li>
</ul>
<pre>{{ items | json }}</pre>
</div>
<script src="http://code.angularjs.org/1.0.2/angular.min.js"></script>
<script src="https://raw.github.com/angular-ui/angular-ui/master/build/angular-ui.min.js"></script>
コーヒースクリプト
myapp = angular.module 'myapp', ['ui']
myapp.controller 'controller', ($scope) ->
$scope.items = [
{id: 1, name: 'Item 1', children: [
{id: 5, name: 'SubItem 1.1', children: [
{id: 11, name: 'SubItem 1.1.1', children: []},
{id: 12, name: 'SubItem 1.1.2', children: []}
]},
{id: 6, name: 'SubItem 1.2', children: []}
]},
{id: 2, name: 'Item 2', children: [
{id: 7, name: 'SubItem 2.1', children: []},
{id: 8, name: 'SubItem 2.2', children: []}
{id: 9, name: 'SubItem 2.3', children: []}
]},
{id: 3, name: 'Item 3', children: [
{id: 10, name: 'SubItem 3.1', children: []}
]}
]
angular.bootstrap document, ['myapp']
コードはこの JSFiddle にもあります: http://jsfiddle.net/bESrf/1/
私の「実際の」コードでは、子のレベルを 1 つだけにする代わりに、2 番目のレベルを<ul>
テンプレートに抽出して再帰的にレンダリングしました。これは正常に動作しますが、JSFiddle でそれを行う方法が見つかりませんでした。
それを再帰的にレンダリングし、ng-model によって表されるオブジェクトとサブオブジェクトの配列を変更するドラッグ アンド ドロップを許可する最良の方法は何でしょうか?