CakePHP 3.x使用jQueryUI Sortable更新记录

时间:2016-01-22 10:49:06

标签: ajax cakephp cakephp-3.0 jquery-ui-sortable

在其中一个视图中,我实现了一个列表,可以使用jQueryUI Sortable进行拖放重新排序。

meetings.ctp中列表的输出如下所示:

<ul id="sortable">
    <?php foreach($meetings as $meeting): ?>
    <li class="ui-state-default">>
      <?php echo  $meeting['name'] . ' ' . $meeting[place]; ?>
    </li>
    <?php endforeach; ?>
</ul>

会议清单基于优先顺序提供:

$upcommingMeetings_query = $this->MeetingsTasks->find('all')
    ->order(['Meetings.priority' => 'ASC']);

我需要做的是在移动后更新Meeting记录的优先级。但是,我只能找到如何在旧版本的CakePHP中使用不再可用的JsHelper找到示例。

非常感谢任何帮助或指导。如果有任何我应该共享的代码,请提出要求。

1 个答案:

答案 0 :(得分:1)

首先从第<body <?php body_class(); ?>> 行删除额外的>,然后使用<li class="ui-state-default">>的{​​{1}}事件

stop

您的sortable代码应该是这样的:

$( "#selector" ).sortable({
  stop: function( event, ui ) {
    //Invoke the serialize method:
    var sorted = $(this).sortable('serialize');
    console.log(sorted);
    //output: 'sort[]=4&sort[]=1&sort[]=2&sort[]=5&sort[]=3'
    //here goes your ajax request to server
    $.ajax({
       url: 'someURL',
       cache: false,
       type: 'post',
       data: sorted,
       success: function(result) {//parse it here}
    });
  }
});

您可以通过将.ctp替换为您想要的任何内容来自定义此<ul id="sortable"> <?php foreach($meetings as $meeting): ?> <li class="ui-state-default" id="sort-<?php echo $meeting['id']; ?>"> <?php echo $meeting['name'] . ' ' . $meeting['place']; ?> </li> <?php endforeach; ?> </ul> 部分。

在控制器部分,您必须在<li class="ui-state-default" id="sort-<?php echo $meeting['id']; ?>">循环中解析它并相应地更新sort,否则您可以保存原样。 working link