我对 YUI (2) 数据表和拖放组合有疑问。我有一个项目表,其中一个是项目描述,我使用 YUI 的 TextboxCellEditor 使其可编辑(和可保存)。我还使行可拖动(因此我可以将它们拖放到另一个容器中)。
但是我遇到了两个问题: - 我只能通过单击第二列来获得 DnD(第一列不起作用) - 我只能在初始化后的第二次尝试中让它工作。
这是我的 JS 中的一个片段(简化):
nameFormatter = function (elCell, oRecord, oColumn, oData) {
var link = '/share/page/site/' + Alfresco.constants.SITE + '/document-details?nodeRef=' + oRecord.getData('nodeRef');
elCell.innerHTML = '<span><a href="' + link + '" class="drags">' + oData + '</a></span>';
};
descFormatter = function(elCell, oRecord, oColumn, oData) {
elCell.innerHTML = '<pre class="desc">' + oData + '</pre>';
};
columnDefs = [
{key: "name", label: "Name", sortable: true, formatter: nameFormatter, resizable: true}
, {key: "description", label: "Description", sortable: true, formatter: descFormatter, editor: new YAHOO.widget.TextboxCellEditor(), resizable: true}
];
this.mediaTable = new YAHOO.widget.DataTable(this.id + "-media-table", columnDefs, this.dataSource, {
MSG_EMPTY: "No files"
});
// now we want to make cells editable (description)
var highlightEditableCell = function(oArgs) {
var elCell = oArgs.target;
if(YAHOO.util.Dom.hasClass(elCell, "yui-dt-editable")) {
this.highlightCell(elCell);
}
};
this.mediaTable.subscribe("cellMouseoverEvent", highlightEditableCell);
this.mediaTable.subscribe("cellMouseoutEvent", this.mediaTable.onEventUnhighlightCell);
this.mediaTable.subscribe("cellClickEvent", this.mediaTable.onEventShowCellEditor);
this.mediaTable.subscribe("editorSaveEvent", this.saveDesc);
this.mediaTable.subscribe('cellMousedownEvent', this.onRowSelect);
saveDesc 函数是简单的 Ajax 调用,用于保存项目的描述。这是 onRowSelect 函数:
onRowSelect = function(ev) {
console.log(" == method onRowSelect");
var tar = Event.getTarget(ev)
, dd
;
dd = new YAHOO.util.DDProxy(this.getTrEl(tar));
dd.on('dragDropEvent', function(e) {
YAHOO.Bubbling.fire('myCustomEvent', { target: e.info, src: tar});
dd.unreg();
});
};
如果我只是点击 desc,我会得到文本编辑器,如果我点击 name,我会打开链接。就像我说的,当我在第二列(描述)上鼠标按下时,第一次尝试我什么也没得到。然后我第二次单击并按住,这一次它起作用了(我得到了一个 DDProxy,我可以将它拖放到目标上,一切都在那里)。
另一个问题是,当我单击并按住名称列时,我没有得到 DDProxy(我得到了我的 onRowSelect 事件和正确的行)。
我在这里做错了什么?
更新:通过使用 Satyams 答案解决了第一个问题 - 使用链接删除我的单元格的格式化程序。第二个问题(仅在第二次单击时)已解决,因为我在onRowSelect函数中添加了缺少的dd.handleMouseDown(ev.event) 。