Dojo拖放,我们如何保存位置

时间:2010-05-19 18:43:13

标签: drag-and-drop

在dojo拖放之后,一旦提交了页面,我就必须保存已放入“targetZone”的每个项目的位置。我们怎样才能保住这个位置?

2 个答案:

答案 0 :(得分:1)

欧根在这里回答: Dojo Drag and drop: how to retrieve order of items?

那将是正确的方式。如果查看上面的链接,可以将生成的“orderedDataItems”对象保存为JSON ...

查看以下功能。它将我们的DND“Lightbox”(dojo.dnd.source)保存为JSON。

  • _it是当前的原始dnd项目
  • _it.data.item包含您需要保留的所有内容
  • 在我们的案例中_it.data.item.label将自定义节点(图片,视频,文档)保存为字符串,稍后我们可以使用它来dojo.place它
  • 它是您要在没有dom节点的情况下保存的dnd项目

E.g。如果您将项目从dijit树中删除到任意dojo dnd源/目标: 我们之前制作的data.item中的_RAM或_S需要被覆盖。

LBtoJson: function(){
        var that = this;
        var orderedLBitems = this.dndSource.getAllNodes().map(function(node){

            var _it = that.dndSource.getItem(node.id);

            var it = { data:{ item:{} }, label:'', type:'' };
            if((_it.data.item._RAM)){_it.data.item._RAM={}}
            if((_it.data.item._S)){_it.data.item._S={}}

            it.data.item = dojo.clone(_it.data.item);
            it.label = it.data.item.label[0]||it.data.item.label;
            it.type = _it.type;
            console.log( it );
            return it;
        });
        var LBjson = dojo.toJson(orderedLBitems);
        return LBjson;
    }

答案 1 :(得分:0)

通过调用getAllNodes(),您将按照显示的顺序接收节点列表。因此,如果您想按特定顺序保存列表,可以执行与此类似的操作:

var data;
var nodes = dndSrc.getAllNodes();
for(var i; i < nodes.length; i++)
{
    data.push({id: nodes[i].id, order: i});
}

有关数据提交的Dojo DnD的更多信息,请查看有关DnD和表单提交的文章:http://www.chrisweldon.net/2009/05/09/dojo-drag-n-drop-and-form-submission