Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从django传单表单获取对传单JS实例的引用_Javascript_Django_Leaflet - Fatal编程技术网

Javascript 从django传单表单获取对传单JS实例的引用

Javascript 从django传单表单获取对传单JS实例的引用,javascript,django,leaflet,Javascript,Django,Leaflet,使用django传单,我创建了如下表单 class AnnotationForm(forms.ModelForm): <crispy forms stuff redacted from here for brevity> class Meta: model = Annotation # Your user model fields= ['name','annotationType','description','locat

使用django传单,我创建了如下表单

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()}
现在。在body load开始时,它隐藏了包含贴图的div,其他地方有一些代码基本上监视annotationType下拉列表,如果选择了“location”,它将取消隐藏该div

问题是,JS似乎不喜欢被实例化为隐藏的,并且似乎对其边界有点困惑。我假设答案是在映射上调用_onresize(),但是我似乎找不到如何获取映射实例的引用

L.map('id_annotation_location_point_map')._onResize()
..只是产生一个投诉,说映射已经初始化。检查表单生成的代码似乎在(function(){etc})类型闭包中创建了映射,这使得从那里劫持变量变得不可行

所以我的问题是,在这种情况下,如何获得对传单.js地图的引用


有,但它似乎并没有真正回答这个问题,只是提出了一个在我的案例中不可用的替代方案。

我遇到了完全相同的问题-使用django传单在隐藏的div中渲染地图,但不知道如何触发_onResize/invalidateSize函数

我不知道这是一个特别好的解决方案,但我所做的是从map:init事件中获取对map的引用,如下所示:

$(文档).ready(函数(){
//存储变量以在作用域中保存映射
var映射;
//在map:init事件期间填充map变量(请参阅使用Javascript回调函数)
//这里https://github.com/makinacorpus/django-leaflet
$(窗口).on('map:init',函数(e){
map=e.originalEvent.detail.map;
});
//隐藏地图
$('hiddendivithmap').hide();
//单击显示地图的对象
$(“#myButton”)。单击(函数(){
$('hiddendivithmap').show();
map.invalidateSize()
});

});我确实找到了一个答案,但不是很令人满意,我怀疑在不同的浏览器中可能会有不同的结果。django表单似乎有一个回调,用于在地图上做一些额外的工作。它可能劫持回调并从那里获取地图的引用。本质上,通过在生成的函数后声明一个同名函数,可以提供您自己的函数,您可以在其中获取该引用并将其隐藏起来以供以后使用。这是一个令人讨厌的“解决方案”,所以我不会把它作为一个解决方案发布,以防有人想出更好的解决方案。总比什么都没有好。这应该可以做到。比我的版本好得多。我在
map:init
函数中添加了一个
alert
,在firefox中,它只在我
Ctrl
+
F5
时才会进入该函数。如果我只是正常加载页面,它不会调用此函数。知道为什么吗?对不起,我不知道。您是否尝试过在纯js
窗口中执行此操作。addEventListener(“map:init”、函数(e){
或其他类似的工具?”我还发现这可能很有用
L.map('id_annotation_location_point_map')._onResize()