javascript - 当 Django Admin Popup(添加、更新、删除)完成时,有没有办法调用 Javascript 函数?
问题描述
我有这种情况,我在 Person 字段上绑定了 change 事件。
每次选择值更改时,我们都依赖一些 JavaScript 来运行。它当前正在侦听所述元素的更改事件,当用户直接在选择建议的菜单中单击一个值时,该事件可以正常工作。
遗憾的是,当通过 Admin Popup 功能填充此选择时,似乎没有为选择触发更改事件,因为我们的回调没有执行,即使元素的值实际上已更改。
与用户直接从列表中单击一个值时相比,我们可以监听另一个事件以获得相同的行为吗?
解决方案
正如您在django 源代码中看到的那样,change
更新相关对象时不会触发事件。当它在删除和添加时触发。
我最初认为这是一个错误,但实际上它是有道理的,因为该值不一定/实际上已更新。
但是,如果您需要在用例中触发此类事件,这确实是一个问题。我可以建议的最好方法是在您自己的 JS 中覆盖此行为(当然,请确保在加载 Django 的 JS 后调用它):
window.djangoDismissChangeRelatedObjectPopup = window.dismissChangeRelatedObjectPopup;
window.dismissChangeRelatedObjectPopup = function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
const id = win.name.replace(/^edit_/, '');
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
const selects = $(selectsSelector);
window.djangoDismissChangeRelatedObjectPopup(win, objId, newRepr, newId);
selects.trigger('change');
}
因此,change
每当更新相关对象时都应该触发该事件。
推荐阅读
- node.js - Nightwatch:无法创建新服务:ChromeDriverService
- python - 如何从 Pandas 中的给定行和列开始读取 Excel 文件
- ignite - Apache Ignite 与 SQL Server 性能对比
- c# - 通过 .NET 访问电话文件
- azure - MarkLogic - 森林数据文件夹和 Azure Blob
- c# - Automapper EF 类到模型类
- python - 从 CSV 读取并计算平均值(python)
- charts - Chart.js 图表只有两个坐标
- reactjs - 将 basename 设置为 Domain/reactapp/#/home 而不是 Domain/#/reactapp/home
- spring-boot - Spring rabbitmq amqp connection Factory - How override connection properties