我在道场学习dnd。我通过ajax获得的json数据。并显示动态字符串数据已创建div形式。适用并且看起来很好。但是dnd不起作用。当我认为因为字符串类型。我征求意见!
myboard.html
<script>
require([ "dojo/parser","dojo/dom", "dojo/on", "dojo/request", "dojo/json","dojo/_base/array"
,"dijit/Dialog","dijit/form/Button","dijit/form/CheckBox","dojo/query","dojo/dnd/Source","dojo/dnd/Target","dijit/layout/BorderContainer",
"dijit/layout/TabContainer", "dijit/layout/ContentPane","dijit/layout/LinkPane",
"dojo/domReady!" ], function(parser,dom,on,request,json,arrayUtil,Dialog,Button,CheckBox,query) {
parser.parse();
.....
function addTab(formCount,num){
var cont ='';
var xhrArgs = {
url: '/checkData',
handleAs: "json",
content:{
seq:num
},
load: function(data){
alert('ajax success:'+data);
cont+='<div data-dojo-type="dojo/dnd/Source" class="source">'
arrayUtil.forEach(data,function(item,i){
cont+='<div class="dnd" data-dnd-type="a">'+data.seq+'</div>';
cont+='<div class="dnd" data-dnd-type="b">'+data.name+'</div>';
cont+='<div class="dnd" data-dnd-type="c">'+data.form+'</div>';
cont+='<div class="dnd" data-dnd-type="d">'+data.desc+'</div>';
cont+='<div class="dnd" data-dnd-type="e">'+data.writer+'</div>';
}
cont+='</div>';
.....
}
答案 0 :(得分:0)
您的代码存在一些问题。
首先,您在data.seq
循环中使用data.name
,data.form
,forEach()
,...但是,我想您要使用item.seq
,item.name
,item.form
,......代替。
然后第二个问题,你在代码末尾错过了一个括号,关闭了forEach()
循环。我想这部分代码位于.....
,但我无法确定。
第三个问题是dojo/dnd/Source
中的可拖动项目应具有类名dojoDndItem
。你的<div>
都没有这个类,所以没有一个是可拖动的。
另一个问题是,您没有将cont
内的HTML添加到DOM节点,因此永远不会显示它。我想部分代码位于.....
,但就像其他问题一样,我无法确定它。
然后最后一个问题是你必须通过Dojo解析器解析你的内容才能使它工作。你可以使用:
来做到这一点parser.parse(domNode);
其中domNode
是用于向其添加HTML字符串的节点。
我修改了您的代码,结果如下:http://jsfiddle.net/n7MxD/