在开始之前,照例,我们先看效果和功能实现。

关于自定义菜单的实现,这里就不多说了,需要了解的请访问:http://www.cnblogs.com/codelove/p/4838766.html

这里需要说明的是排序的实现。

我们先来看看关键的页面代码:

<div class="row">
<div class="col-lg-12 full-width" id="leftMenus">
<div class="col-lg-12">
<div class="dd" id="ddMenus" data-bind="if:Menus">
<ol class="dd-list" data-bind="sortable:{template: 'menuListTmpl', data: Menus, afterMove: $root.dropCallback }"> </ol>
</div>
</div>
</div>
</div>
<script id="menuListTmpl" type="text/html">
<li class="dd-item lv1">
<div class="dd-handle">
<span class="pull-right">
<i class="fa fa-plus" data-bind="click:$root.AddClick"></i> &nbsp;&nbsp;
<i class="fa fa-times" data-bind="click:$root.RemoveItem"></i>&nbsp;&nbsp;
<i class="fa fa-pencil" data-bind="click:$root.ItemClick"></i>
</span>
<span>
<span class="label label-info"><i class="fa" data-bind="css:$root.getIconCssByType(type)"></i></span>
<span data-bind="text:name,click:$root.ItemClick" style="margin-left:10px;"></span>
</span>
</div>
<!-- ko if:$data.sub_button -->
<ol class="dd-list" data-bind="sortable:{template: 'menuItemTmpl', data: $data.sub_button, afterMove: $root.dropCallback }">
</ol>
<!-- /ko -->
</li>
</script>

如上所示,注意以下几点:

  • sortable:data-bind增加了sortable绑定,用于支持拖拽排序
  • afterMove:拖拽后触发事件

这里,我们需要看看拖拽后触发的事件代码:

this.dropCallback = function () {
self.RefreshLocalData();
};
this.RefreshLocalData = function (menus) {
var menus = menus || ko.mapping.toJS(self.Menus())
self.Menus([]);
self.Menus(menus);
}

这里值得注意的是,拖拽事件中,刷新了数据以便更新UI显示。

至于上面的sortable,则用到了一个ko组件——knockout-sortable

该组件支持拖拽排序,并会自动更新observableArrays。基于此,你可以很方便的很简单的开发一些拖拽排序的业务。

以下是官方GitHub地址:https://github.com/rniemeyer/knockout-sortable

使用起来非常简单,官方还提供了4个示例,如下所示:

上面这个Demo做排班或者课程安排的业务是非常简单的。

不过值得注意的是,knockout-sortable依赖以下几个库:

  • Knockout 2.0+
  • jQuery
  • jQuery UI

插件的具体使用请以官方文档和Demo为准吧,这里就不过多介绍了。

使用knockout-sortable实现对自定义菜单的拖拽排序的更多相关文章

  1. html5 Sortable.js 拖拽排序源码分析

    最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的.   本帖属于原创,转载请出名出处. 官网http:// ...

  2. sortable.js 拖拽排序及配置项说明

    // 拖动排序 $(function() { /*排序*/ //排序 // Simple list ]; new Sortable(list, { group: "name", a ...

  3. 【原创】js实现一个可随意拖拽排序的菜单导航栏

    1.想做这个效果的原因主要是用在UC上看新闻发现他们的导航菜单很有趣.无聊的时候在哪划着玩了很久.所以就干脆自己写一个.原效果如下 2.整体效果如下,在已推荐和未添加里面每个小方块可以触摸移动位置互换 ...

  4. js 禁用右键菜单、拖拽、选中、复制

    //禁用拖拽 document.ondragstart = function () { return false; }; /** * 禁用右键菜单 */ document.oncontextmenu ...

  5. katalon系列十:Katalon Studio自定义关键字之拖拽

    Katalon Studio自带关键字“Drag And Drop To Object”,可以在这个网站实践:http://jqueryui.com/droppable/#default 不过“Dra ...

  6. 通过jquery-ui中的sortable来实现拖拽排序

    1.引入文件 <script src="{sh::PUB}js/jquery-1.10.1.min.js"></script> <link rel=& ...

  7. Sortable拖拽排序插件数据筛选

    后台有拖拽排序功能,然而前段在开发的时候,一整页的数据都发给后端了. 于是查看前端代码,想到了如下解决办法,即先把排序前的保存,然后对比排序后的,有差异的才发回给后端. var new_ids_ord ...

  8. View拖拽 自定义绑定view拖拽的工具类

    由于工作需求,需要用到这种处理方法所以我就写了这个 废话不多说先看效果图 接下来就看代码吧 DragDropManager import android.app.Activity; import an ...

  9. vue全局自定义指令-元素拖拽

    小白我用的是vue-cli的全家桶,在标签中加入v-drap则实现元素拖拽, 全局指令我是写在main.js中 Vue.directive('drag', { inserted: function ( ...

随机推荐

  1. MySQL命令实例

    显示数据表结构 1.desc(describe) tablename;2.show columns from tablename;3.use information_schema;    select ...

  2. 面试题<初级>

    INTERVIEW .markdown-body ul pre code { background:red; font-size:40px; } @code-char:"```" ...

  3. 我所理解的SoC

    前阵子出去找工作,有的人不太理解,你们SoC有什么可做的,不就是找几个IP来搭积木嘛.你那个FPGA prototyping有什么可做的,不就是编一个镜像嘛. 正好,新项目,重新开始做一颗SoC.接下 ...

  4. inndb存储引擎调优

    inndb存储引擎调优介绍: InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的 ...

  5. 【转载】java项目中经常碰到的内存溢出问题: java.lang.OutOfMemoryError: PermGen space, 堆内存和非堆内存,写的很好,理解很方便

    Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen space 解决 解决方案 在 catalin ...

  6. python安装使用talib

    安装主要在http://www.lfd.uci.edu/~gohlke/pythonlibs/这个网站找到 按照需要的python版本和平台位数下载,然后直接用pip install 进行安装 包含的 ...

  7. touchstart,touchmove判断手机中滑屏方向

    滑动屏幕    touchstart:接触屏幕时触发,touchmove:活动过程触发,touchend:离开屏幕时触发 首先获取手接触屏幕时的坐标X,Y //获取接触屏幕时的X和Y$('body') ...

  8. 解决Visual Studio 2010闪退问题

    许多人都会面临这样的问题,vs2010闪退,明明程序执行成功,明明没有错误,缺闪了一下结束. 闪退问题主要是缓存的问题,通过在程序末尾,即main函数后增加 getchar(); getchar(); ...

  9. css3中的颜色

    1颜色.color:rgba(R,G,B,A) R,G,B是分别代笔红,绿,蓝值是在0到255之间的数也可以是0.0% - 100.0%,A代表的是透明度0到1之间. 2.渐变.background- ...

  10. 【温故Delphi】双击工程文件打开软件

    问题描述 大部分软件都有鼠标双击文件,就能打开所关联的软件并打开所选工程,这是如何做到的呢? 把文件关联到一个程序中,双击文件来启动程序,那么这个文件名称就是这个程序的命令行的一个参数. 所以要想实现 ...