如何在 django-leaflet 中向 LeafletWidget 添加事件?
How to add event to LeafletWidget in django-leaflet?
在我的 Django 应用程序中,我有一个带有名称和位置(点)的 Worker 模型。使用 django-leflet LeafletWidget 我可以创建一个表单,用户可以在其中设置位置(该工作人员的标记)。
是否可以向小部件添加事件,因此,每次用户设置标记或更改标记位置时,它都会获取该点的坐标并执行其他操作(如 ajax 请求)?
class WorkerForm(forms.ModelForm):
class Meta:
model = WorkerModel
exclude = ("id",)
widgets = {
'name':forms.TextInput(attrs={'class': 'form-control'}),
'location': LeafletWidget(),
}
在我刚刚调用的模板中
'forms.location'
并使用控件渲染地图以设置标记
每次用户设置标记时,我都想获取该标记的位置。我该怎么做?
首先,您应该向表单添加一个额外的 JavaScript 文件,您可以在其中捕获事件并对其进行任意操作。为此,请在表单中添加一个 class 媒体,并指明 JS 在其中的位置:
class WorkerForm(forms.ModelForm):
...
class Media:
js = ('path/to/script.js',)
在应用的静态目录内的 path/to 目录中创建 script.js 文件。在 script.js 上添加以下代码:
// Wait for the map to be initialized
$(window).on('map:init', function(e) {
// Get the Leaflet map instance
map = e.originalEvent.detail.map;
// Capture the creation of a new feature
map.on('draw:created', function (e) {
const coordinates = e.layer._latlng;
// Your stuff
});
map.on('draw:edited', function (e) {
var layers = e.layers._layers
var coordinates;
Object.keys(layers).forEach(function(key) {
coordinates = layers[key]._latlng;
});
// Your stuff
});
});
检查 Leaflet Draw documentation 以查看所有可用的事件。
在我的 Django 应用程序中,我有一个带有名称和位置(点)的 Worker 模型。使用 django-leflet LeafletWidget 我可以创建一个表单,用户可以在其中设置位置(该工作人员的标记)。 是否可以向小部件添加事件,因此,每次用户设置标记或更改标记位置时,它都会获取该点的坐标并执行其他操作(如 ajax 请求)?
class WorkerForm(forms.ModelForm):
class Meta:
model = WorkerModel
exclude = ("id",)
widgets = {
'name':forms.TextInput(attrs={'class': 'form-control'}),
'location': LeafletWidget(),
}
在我刚刚调用的模板中 'forms.location' 并使用控件渲染地图以设置标记
每次用户设置标记时,我都想获取该标记的位置。我该怎么做?
首先,您应该向表单添加一个额外的 JavaScript 文件,您可以在其中捕获事件并对其进行任意操作。为此,请在表单中添加一个 class 媒体,并指明 JS 在其中的位置:
class WorkerForm(forms.ModelForm):
...
class Media:
js = ('path/to/script.js',)
在应用的静态目录内的 path/to 目录中创建 script.js 文件。在 script.js 上添加以下代码:
// Wait for the map to be initialized
$(window).on('map:init', function(e) {
// Get the Leaflet map instance
map = e.originalEvent.detail.map;
// Capture the creation of a new feature
map.on('draw:created', function (e) {
const coordinates = e.layer._latlng;
// Your stuff
});
map.on('draw:edited', function (e) {
var layers = e.layers._layers
var coordinates;
Object.keys(layers).forEach(function(key) {
coordinates = layers[key]._latlng;
});
// Your stuff
});
});
检查 Leaflet Draw documentation 以查看所有可用的事件。