我有一个包含导航菜单结构的数据结构。
function linksRarrange($scope, linksData) {
$scope.links = [
{
text: 'Menu Item 1',
url: '#',
submenu: []
}, {
text: 'Menu Item 2',
url: '#',
submenu: [
{
text: 'Sub-menu Item 3',
url: '#',
submenu: []
}, {
text: 'Sub-menu Item 4',
url: '#',
submenu: [
{
text: 'Sub-sub-menu Item 5',
url: '#',
submenu: [
{
text: 'Sub-sub-menu Item 6',
url: '#',
submenu: []
}
...
];
}
我正在使用 jQuery UI 重新排列它们。问题是我不确定在这种情况下如何使用 2 路绑定,以便links
在更改时更新对象。
这是 HTML:
<div class="nav-manage clearfix" ng-app="linksManager">
<div
class="links-arrange"
ng-controller="linksRarrange"
ng-init="submenu = links;"
>
<ul
class="ng-list-level"
model-subset="submenu"
ui-jq="sortable"
ng-include="'inner-list.html'"
></ul>
</div>
<script type="text/ng-template" id="inner-list.html">
<li ui-jq="droppable" ng-repeat="link in submenu">
<a href="{{link.url}}">{{link.text}}</a>
<ul
class="ng-list-level"
ng-class="{'empty hidden': !link.submenu.length}"
ui-jq="sortable"
ng-init="submenu = link.submenu;"
ng-include="'inner-list.html'"
></ul>
</li>
</script>
这是 jQuery UI 直通:
linksManager.value('ui.config', {
jq: {
sortable: {
connectWith: '.ng-list-level',
dropOnEmpty: true,
placeholder: 'sortable-nav-items-placeholder'
},
droppable: {
tolerance: 'touch',
over: function () {
$(this).children('ul.hidden').removeClass('hidden');
},
out: function () {
$(this).children('ul.empty').addClass('hidden');
},
drop: function () {
$(this).children('ul.empty').removeClass('empty');
}
}
}
});