javascript – Django Admin – RelatedObjectLookups – 如何刷新并设置父窗口上的选择?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Django Admin – RelatedObjectLookups – 如何刷新并设置父窗口上的选择?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3057字,纯文字阅读大概需要5分钟。
内容图文
![javascript – Django Admin – RelatedObjectLookups – 如何刷新并设置父窗口上的选择?](/upload/InfoBanner/zyjiaocheng/742/889250c1f2124b809364f2e87e4782de.jpg)
我希望我的一个表单像管理页面一样工作,所以我想我会查看代码,看看它是如何工作的.
具体来说,我希望用户能够单击选择列表旁边的“”图标,然后转到管理页面的弹出窗体以添加新项目.
当他们在那里输入新项目时,我希望新项目出现在选择框中,然后被选中(就像此功能在管理页面上的工作方式一样).
我将管理js库复制到我自己的模板中,我使链接调用相同的JS函数,并且弹出窗口确实正确打开,但是在我保存一个新对象后,弹出窗口变为空白而不是关闭,并且没有任何反应父页面.
这是我放在页面中的内容:
...
<td>
<div class="fieldWrapper">
<select name="form-0-plasmid" id="id_form-0-plasmid">
...
</select>
<a href="/admin/VirusTracker/plasmid/add/" class="add-another" id="add_id_plasmid" onclick="return showAddAnotherPopup(this);"> <img src="/media/admin/img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a>
</div>
</td>
...
我尝试单步执行管理表单上的javascript以查看它是如何工作的,但我没有看到任何会关闭窗口或填充父窗口选择的内容.
在此先感谢您的帮助.
更新3
运行dismissAddAnotherPopup时,我收到此javascript错误
"SelectBox is not defined"
这是指向dismissAddAnotherPopup中的这一行
SelectBox.add_to_cache(toId, o);
我以为我知道Javascript,但我没有看到该变量应该来自哪里:-(
更新2
一切似乎都正常射击.在弹出窗口中单击“保存”后,我得到一个空白页面.这是该页面的来源:
<script type="text/javascript">opener.dismissAddAnotherPopup(window, "9", "CMV_flex_myr_GENE1_._._WPRE_BGH");</script>
所以看起来这个javascript没有被执行或者失败了.
更新
这是Daniel提到的相关代码.所以唯一的问题是这个代码要么没有触发,要么触发不正确.
Django的/的contrib /管理/ options.py:
...
if request.POST.has_key("_popup"):
return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, "%s", "%s");</script>' % # escape() calls force_unicode.
(escape(pk_value), escapejs(obj)))
...
/media/admin/js/admin/RelatedObjectLookups.js:
function dismissAddAnotherPopup(win, newId, newRepr) {
// newId and newRepr are expected to have previously been escaped by
// django.utils.html.escape.
newId = html_unescape(newId);
newRepr = html_unescape(newRepr);
var name = windowname_to_id(win.name);
var elem = document.getElementById(name);
if (elem) {
if (elem.nodeName == 'SELECT') {
var o = new Option(newRepr, newId);
elem.options[elem.options.length] = o;
o.selected = true;
} else if (elem.nodeName == 'INPUT') {
if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
elem.value += ',' + newId;
} else {
elem.value = newId;
}
}
} else {
var toId = name + "_to";
elem = document.getElementById(toId);
var o = new Option(newRepr, newId);
SelectBox.add_to_cache(toId, o);
SelectBox.redisplay(toId);
}
win.close();
}
解决方法:
好吧,javascript只是使用启动元素的id属性来标识要更新的选择字段. (从beginig中删除’add_’后).
所以我只是更改了链接的id属性以匹配模板中select元素的id:
<a href="/admin/VirusTracker/plasmid/add/" class="add-another" id="add_id_{{field.html_name}}" onclick="return showAddAnotherPopup(this);"> <img src="/media/admin/img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a>
哇,我希望这已被记录在某个地方!我失去了几个小时.
(有关如何工作的更多技术细节,请参阅我对问题的更新.)
内容总结
以上是互联网集市为您收集整理的javascript – Django Admin – RelatedObjectLookups – 如何刷新并设置父窗口上的选择?全部内容,希望文章能够帮你解决javascript – Django Admin – RelatedObjectLookups – 如何刷新并设置父窗口上的选择?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。