Dojo 1.8 dnd修改dnd项的数据状态

时间:2014-08-01 09:59:12

标签: dojo drag-and-drop

我有一个dnd.source和一个dnd.target。因此,用户从源中拖动项目并将其放在目标上。我使用自定义创建者,因为他们的观点不同。它的dnd项由像这样的数据对象支持

{阿尔法: “alphaVal”,  测试: “betaVal定义”,  查理:“charlieVal”  增量: “deltaVal”}

源上的dnd项目显示为列表,但当放到目标上时,自定义创建者会创建一个包含三个输入字段的div,以便用户可以更改alpha,beta,charlie的状态。

然后我使用dojo,以便在任何字段上更改值时更新项目的数据状态。例如,

function( item, hint ) {

var node = domConstruct.create( 'div' );

 var alphaVal = new TextBox( {
    name : 'filterBy',
    value : item.filterBy,
    placeHolder : 'type in a value',
  } );
  domConstruct.place( alphaVal.domNode, node );

 on( filterValue, 'change', function() {
    item.alphaVal = alphaVal.get( 'value' );
    targetDnd.setItem( itemId ,  item);
  } );

return {
  'node' : node,
  'data' : item,
  'type' : hint
};
};

正如您所看到的,我正在更改支持该dnd项的数据状态。我的问题是dnd源设置为copyOnly,因此当拖动到目标时,项仍然保留在源中。因此,当我更改目标中dnd项的基础数据状态时,它还会更改源上dnd项的数据状态。因此,同一项目的任何后续拖拽'n'都会带有该状态。我怎样才能阻止这种情况发生?

此致 ģ

1 个答案:

答案 0 :(得分:0)

到目前为止,我找到的唯一方法是使用dojo / _base / lang来克隆项目,然后修改并返回该项目。

var clonedItem = lang.clone(item);

on( inputTextBox, 'change', function() {
  // update clonedItem
  // target.setItem(itemId, clonedItem);
});      
return {
"node" : node,
"data" : clonedItem,
"type" : hint
};

我想知道是否有办法设置源来传递数据项的克隆而不是项目的引用。