【发布时间】:2014-05-31 09:02:38
【问题描述】:
使用 django-leaflet 我创建了如下表单
class AnnotationForm(forms.ModelForm):
<crispy forms stuff redacted from here for brevity>
class Meta:
model = Annotation # Your user model
fields= ['name','annotationType','description','location_point','document','e']
widgets = {'location_point': LeafletWidget(),'e':forms.HiddenInput()}
它以正常方式从视图中实例化。
在模板中;-
{% crispy annotation_form %}
现在。在开始加载正文时,它会隐藏包含地图的 div,而在其他地方有一些代码基本上会监视 annotationType 下拉列表,如果选择了“位置”,它会取消隐藏 div。
问题是,leafletjs 似乎不喜欢被实例化隐藏,并且似乎对它的界限有点困惑。因此,我假设答案是在地图上调用 _onresize(),但是我似乎找不到如何获取对地图实例的引用。
L.map('id_annotation_location_point_map')._onResize()
..只是产生一个地图已经初始化的抱怨。检查表单生成的代码似乎是在 (function() { etc etc } )() 类型闭包内创建的地图,这使得从那里劫持变量是不可行的。
所以我的问题是,在这种情况下如何获得对 leaflet.js 地图的引用?
有How can I get a leaflet.js instance using only a DOM object?,但它似乎并没有真正回答这个问题,只是提出一个在我的情况下不可用的替代方案。
【问题讨论】:
-
我确实找到了一个答案,但它不是很令人满意,我怀疑在不同的浏览器中可能会有不同的结果。 django-forms 似乎有一个回调,用于在地图上做一些额外的工作。它可以劫持回调并从那里获取对地图的引用。本质上,通过在生成的函数之后声明具有相同名称的函数,您可以提供自己的函数,您可以在其中获取该引用并将其存储起来以备后用。这是一个令人讨厌的“解决方案”,所以我不会将其作为解决方案发布,以防有人提出更好的解决方案。
-
总比没有好..
标签: javascript django leaflet