我的应用中有3列。每列都有一个无序列表。我正在使用Nestable在列表之间拖放列表项。标记如下:
<div class="row-fluid span12">
<div class="cf nestable-lists">
<div id="pjax-content">
<div class="span4">
<div class="dd" id="nestable1">
<ul class="dd-list">
<li class="dd-item dd3-item" data-id="123">
<div class="dd-handle dd3-handle">Drag</div>
<div class="dd3-content">
// list content
</div>
</li>
<li class="dd-item dd3-item" data-id="456">
<div class="dd-handle dd3-handle">Drag</div>
<div class="dd3-content">
// list content
</div>
</li>
</ul>
</div>
</div>
<div class="span4">
<div class="dd" id="nestable2">
<ul class="dd-list">
<li class="dd-item dd3-item" data-id="789">
<div class="dd-handle dd3-handle">Drag</div>
<div class="dd3-content">
// list content
</div>
</li>
<li class="dd-item dd3-item" data-id="1011">
<div class="dd-handle dd3-handle">Drag</div>
<div class="dd3-content">
// list content
</div>
</li>
</ul>
</div>
</div>
<div class="span4">
<div class="dd" id="nestable3">
<ul class="dd-list">
<li class="dd-item dd3-item" data-id="1213">
<div class="dd-handle dd3-handle">Drag</div>
<div class="dd3-content">
// list content
</div>
</li>
<li class="dd-item dd3-item" data-id="1415">
<div class="dd-handle dd3-handle">Drag</div>
<div class="dd3-content">
// list content
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
这有效,我可以在每个列表之间拖放列表项。问题在于我实施PJAX。
我有一些链接使用PJAX来更改URL,即每个链接将根据URL更新每个列表中的数据或数据顺序。因此,数据在id =“pjax-content”内更新,因此它可以正常工作。这是服务器端代码的片段(使用CI):
if (isset($_SERVER["HTTP_X_PJAX"])) {
echo $data['contents'];
} else {
// construct views when not PJAX
}
$ data ['contents']包含html作为字符串。
我也有以下JS库(我已经尝试删除其中一些并且问题仍然存在):
<script type="text/javascript" src="jquery-1.9.0.js"></script>
<script type="text/javascript" src="bootstrap.js"></script>
<script type="text/javascript" src="nestable.js"></script>
<script type="text/javascript" src="nestable-settings.js"></script>
<script type="text/javascript" src="bootstrap-editable.js"></script>
<script type="text/javascript" src="jquery.cookie.js"></script>
<script type="text/javascript" src='jquery.pjax.js'></script>
<script type="text/javascript">
$(document).pjax('[data-pjax] a, a[data-pjax]', '#pjax-content');
$(document).on('pjax:send', function() {
console.log("before send");
});
$(document).on('pjax:complete', function() {
console.log("done!");
});
</script>
当我点击PJAX工作的其中一个链接时,数据会更新,页面不会重新加载,控制台会在发送和完成之前显示 - 所以一切都很顺利。但是,可嵌套项目不再可选,因此我无法拖放它们。当我进行整页刷新时,它可以工作,我可以拖放。
我比较了之前和之后的标记(因为这是上一期),一切都是一样的。
关于我哪里出错的任何建议?或者如何最好地调试这个?
答案 0 :(得分:3)
在你的ajax完成功能之后调用nestable
$(document).on('pjax:complete', function() {
$('#nestable1,#nestable2,#nestable3').nestable();
});