0
私はカスタムListItemsで複数のリストを持っています(それらはすべて同じです)。ソート可能にしてドラッグできます。&別のリストにドロップしてください。カスタムListItemでリストにドラッグ&ドロップ
これらはすべて問題なく動作しますが、Droped ListItemを選択すると、そのアイテムがこのウィジェットの子ではないという例外が発生します。また、listItemでリストのindexOfメソッドを呼び出すと、-1が返されます。
リスト上(挿入前後)のgetChildrenを呼び出すと、要素がリストにあり、ビューでも選択が正しくレンダリングされます。ここで
は私のリストのコードです:
qx.Class.define("padawan.quicksearch.SearchList", {
extend : qx.ui.form.List,
construct : function() {
this.base(arguments);
this.context = arguments[0];
this.setHeight(null);
this.setEnableInlineFind(false);
this.setDroppable(true);
this.setDraggable(true);
// create the controller
var controller = new qx.data.controller.List(null, this);
controller.setDelegate({
createItem : function() {
return new padawan.quicksearch.SucheComposite(this.context);
},
bindItem : function(controller, item, id) {
controller.bindProperty("", "model", null, item, id);
}
});
// Create drag indicator
var indicator = new qx.ui.core.Widget();
indicator.setDecorator(new qx.ui.decoration.Decorator().set({
widthTop : 1,
styleTop : "solid",
colorTop : "black"
}));
indicator.setHeight(0);
indicator.setOpacity(0.5);
indicator.setZIndex(100);
indicator.setLayoutProperties({
left : -1000,
top : -1000
});
indicator.setDroppable(true);
qx.core.Init.getApplication().getRoot().add(indicator);
// Just add a move action
this.addListener("dragstart", function(e) {
var item = this.getSucheComposite(e.getOriginalTarget());
if (!item) {
e.preventDefault();
return;
}
e.addType("items");
e.addAction("move");
});
this.addListener("droprequest", function(e) {
e.addData("items", [e.getDragTarget()]);
}, this);
this.addListener("dragend", function(e) {
// Move indicator away
indicator.setDomPosition(-1000, -1000);
});
this.addListener("drag", function(e) {
var orig = e.getOriginalTarget();
// if (!qx.ui.core.Widget.contains(this, orig) && orig != indicator)
// {
// return;
// }
var origCoords = orig.getContentLocation();
indicator.setWidth(orig.getBounds().width);
indicator.setDomPosition(origCoords.left, origCoords.top);
});
this.addListener("drop", function(e) {
var selection = e.getData("items")[0];
this.__reorderList(selection, e.getOriginalTarget(), e.getTarget());
}, this);
},
members : {
getSucheComposite : function(child) {
if (child.classname == "padawan.quicksearch.SucheComposite")
return child;
while (child) {
child = child.getLayoutParent();
if ("padawan.quicksearch.SucheComposite" == child.classname) {
return child;
}
}
return child;
},
__reorderList : function(selection, target, list) {
selection = this.getSucheComposite(selection);
if (target.classname !== "padawan.quicksearch.SucheComposite" || !selection) {
return;
}
switch(this.context.type){
case 'Zeile':
selection.setIsFilter(false);
selection.setIsRow(true);
selection.setIsColumn(false);
break;
case 'Filter':
selection.setIsFilter(true);
selection.setIsRow(false);
selection.setIsColumn(false);
break;
case 'Spalte':
selection.setIsFilter(false);
selection.setIsRow(false);
selection.setIsColumn(true);
break;
}
list.addBefore(selection, target);
}
}
});