我的问题与http://www.sitepen.com/blog/2011/12/05/dojo-drag-n-drop-redux/发布的dnd示例(第4步:收听事件)有关。
在我的情况下,我有多个跨越多个页面的dnd源。如何在购物车(目标)中记录数据,以便在加载不同页面后其中的项目不会消失,并且用户可以继续删除更多项目?
任何提示都将不胜感激!
答案 0 :(得分:1)
然而,似乎文档不是1.7列表的上游;
订阅一组主题,您将知道何时/什么是悬垂
主题订阅示例:
dojo.subscribe("dnd/start", function(source, nodes, copy) {
// see dojo.dnd.startDrag documentation for details
// this event will process when user picks up a dnditem
console.log("Arguments:", arguments);
};
dojo.subscribe("dnd/drop", function(source, nodes, copy, target) {
// see dojo.dnd.startDrag documentation for details
// this event will process when user releases dnditem on a valid target
// note the extra parameter, target - in 99% cases a DOM node
console.log("Arguments:", arguments);
});
会发生什么,用户选择项目 - 而dndmanager调用dojo.publish(“dnd / start”,this.source,this.selection,this.bCopy)。订阅主题时,您将收到通知。
dojo.topic的工作方式就像您订阅了邮件列表一样,一旦有新闻就会收到邮件
答案 1 :(得分:0)
您希望使用用户选择购买的商品初始化您的购物车,每一滴都应该
<script>
function dropped(source, nodes, copy, target) {
if(target.id == "myCardId") {
var list = dojo.cookie("mycart");
// split or initialize list (delimiter : comma)
list = list = "" ? [] : list.split(",");
if(dojo.indexOf(nodes[0].id), list) != -1)
// allready there, return
return;
else {
// combine list with every dropped node
dojo.forEach(nodes, function(dropItem) { list.push(dropItem.id); });
// set cookie with new variable
dojo.cookie("mycart", list.join(",");
}
}
}
....
dojo.subscribe("dnd/drop", dropped);
</script>
可以像这样在PHP中实现,虽然我不会详细介绍如何获取项目视图,但为了示例,您可以在db_data中使用它们;
<?php
if(isset($_COOKIE) && !empty($_COOKIE['mycart'])) {
$cartContents = "<ul class=\"dndContainer\">";
foreach(explode(",", $_COOKIE['mycart']) as $id)
$cartContents .= "<li class=\"dndItem\">".$db_data[$id]->title."</li>";
$cartContent .= "</ul>";
}
?>
<div id="dragSource"><? print generateView(); ?></div>
<div id="myCartId"><? print $cartContents; ?></div>
或者对于大型推车来说,一个cookie是过度的,会使标题混乱 然后,上面的脚本可以发送带有id和服务器的XHR,然后将其附加到 会话,使用与javascript相同的逻辑 - 在这种情况下,只需替换 $ _COOKIE与$ _SESSION