如何在ABP框架的自动完成下拉框中返回额外属性?
所以ABP有一种用于选择元素的辅助工具,底层使用的是select2。
我已经查阅了文档,但没有发现相关内容。
所以基本上我有一个cshtml元素,看起来像ABP的自动完成手册中的默认元素,但问题在于只能返回一个用于id的属性和一个用于文本的属性(autocomplete-display-property-name和 autocomplete-value-property-name)。
我知道在select2里,可以在processResults选项中描述你想要的属性名。
这对我来说至关重要,因为id和文本属性不足以指向一个唯一的结果,所以在select事件之后我无法真正发起单独的API请求或类似的操作。
我是不是可以通过某些.js代码来覆盖ABP?(我尝试过多种方式,但都没成功。)
解决方案
根本问题在于框架的架构。ABP的自动完成初始化器在DOM初始化期间在内部封装了 processResults 方法。它仅映射 id 和 text 字段,忽略API响应中发送的其余有效载荷。
为了解决这个问题,我想出了三种方案:
最佳/最灵活的做法:停止在这个字段上使用Tag Helper
不要与框架斗智斗勇,强迫 <abp-select> 去做它不能做到的事情;相反,改用原生HTML,在这个字段上使用一个常规的 <select>,然后再用一点JS手动激活 Select2。这让我们对 processResults 函数拥有100% 的控制权。我可以从API拿到 data.items,并对其进行映射以添加额外的属性。然后在触发 select2:select 事件时就能轻松捕捉到那个额外的属性,并在需要时运行一个单独的API请求,毫不费力。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。