两个带有 angular-ui/ui-sortable 的连接列表,在一个中禁用占位符,同时在另一个中启用它

Posted

技术标签:

【中文标题】两个带有 angular-ui/ui-sortable 的连接列表,在一个中禁用占位符,同时在另一个中启用它【英文标题】:two connected lists with angular-ui/ui-sortable, disable placeholder in one while enabling it in the other 【发布时间】:2016-02-20 12:20:35 【问题描述】:

在我的应用程序中有一个菜单,您可以在其中选择模板并将它们拖放到组件列表中。我正在为两个连接的列表使用 angular-ui ui-sortable。

我正在使用自定义占位符。不幸的是,它在源列表中也可见。

当项目被放入目标列表时,源列表停止事件会触发并添加一些属性。这是后端实际在数据库中创建项目的地方。

ctrl.sortableSrcOptions = 
    placeholder: 
        element: function (currentItem) 
            return $("<div class='component-placeholder'>Place here</div>")[0];
        ,
        update: function (container, p) 
            return;
        
    ,
    connectWith: ".componentlist",
    stop: function (e, ui) 
        if (ui.item.sortable.droptarget.hasClass('componentlist')) 
            //add all properties required by items in destination list
        
    

;

当目标列表接收到该项目时,源列表将被恢复。

ctrl.sortableDestOptions = 
    receive: function (e, ui) 
        //restore original menu
        ctrl.src = angular.copy(ctrl.originalSrc); 
    
;

如何使源列表不显示占位符? 我一直在尝试使源列表不可排序,但随后它也变得不可拖动。如果源列表是不可变的,并且当用户开始从菜单中拖动项目时会创建一个克隆,那将是最好的。

见codepen

【问题讨论】:

【参考方案1】:

通过在css中添加以下内容来解决占位符可见问题:

.sourcelist .component-placeholder 
    display:none;

我将 codepen 原样保留是为了首先显示问题所在。

【讨论】:

以上是关于两个带有 angular-ui/ui-sortable 的连接列表,在一个中禁用占位符,同时在另一个中启用它的主要内容,如果未能解决你的问题,请参考以下文章

为啥第三方包 Autofac 带有两个包?

带有两个参数的URL

带有两个列表片段的可滚动布局

带有两个提交按钮和两个“目标”属性的 HTML 表单

为啥我不能有两个带有 ArrayList 参数的方法?

带有两个拉伸按钮的 Android 操作栏