我的问题与发布在http://www.sitepen.com/blog/2011/12/05/dojo-drag-n-drop-redux/的 dnd 示例(第 4 步:监听事件)有关。
就我而言,我有多个跨多个页面的 dnd 源。如何在购物车(目标)中记录数据,以便加载不同页面后其中的商品不会消失,并且用户可以继续丢弃更多商品?
任何提示将不胜感激!
我的问题与发布在http://www.sitepen.com/blog/2011/12/05/dojo-drag-n-drop-redux/的 dnd 示例(第 4 步:监听事件)有关。
就我而言,我有多个跨多个页面的 dnd 源。如何在购物车(目标)中记录数据,以便加载不同页面后其中的商品不会消失,并且用户可以继续丢弃更多商品?
任何提示将不胜感激!
然而,似乎文档不是 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 就像您订阅了一个邮件列表一样,一旦有消息,您就会收到邮件
您希望使用用户选择购买的商品来初始化您的购物车,每一滴都应该
<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