在 Itemselector extJS 中拖放

Drag and drop in Itemselector extJS

如何禁用 Itemselector 中的项目(见附件)?我想在将项目移动到目标字段时禁用源字段中的某些项目。你能帮我解决这个问题吗? ATTACHMENT - Image

我搜索了很多并应用了所有可能的方法。我发现没有办法。

由于默认情况下没有禁用选项(据我所知),我将删除列表中的项目并在需要时再次添加。在这里我有一个疑问。用户可以从左边拖放到右边,也可以从右边拖放到左边。如何知道他从哪里拖?是否有任何方法或功能可以确定源位置?

不幸的是,这需要相当多的手动工作,因为 ExtJS 不直接支持禁用网格、组合框等中的记录。

我已经描述了 here 如何创建带有禁用记录的组合框。由于组合框和项目选择器都依赖于它们的引擎盖下的 boundlist,这就派上用场了。

您可能会在 ItemSelector 的源代码中发现,它有两个属性,fromFieldtoField,其中包含两个 multiselect 组件。您可以将事件附加到这些列表或它们各自的 boundlist.

快速 fiddle 显示如何使禁用元素变灰以及如何防止 drag/drop 禁用元素:https://fiddle.sencha.com/#view/editor&fiddle/2382

缺少的是按钮在添加之前不检查记录是否被禁用,为此您必须重写 ItemSelector 的 onAddBtnClick 方法。如果您从 ItemSelector 派生一个新的自定义组件,这比在我的 Quick and Dirty fiddle 中要容易得多。所以我强烈建议您定义自己的派生自 ItemSelector 的自定义组件。