javascript - JQuery,如何传递 slug 变量
问题描述
我想知道如何将 slug 变量传递给 JQuery/javascript。
我有一个包含项目的数据表,每行有两个按钮,一个 (1) 使用 Django 创建产品,另一个 (2) 应该使用 JQuery / JS 创建产品。
要创建一个带有按钮 1 的产品,我发现它是直截了当且解释清楚的。
我想使用 JQuery/JS 对按钮 2 执行相同的操作。
按钮 1
<a href="{% url 'products-create' object.products_uid %}"><button type="button" class="btn btn-secondary"><i class="fa fa-pencil"></i></button></a>
带有网址路径:
path("products/<uuid:slug>/create/", ProductsCreateView.as_view(), name="products-create"),
视图.py
class ProductsCreateView(CreateView):
model = Products
template_name = "products_create.html"
slug_field = "products_uid"
按钮 2
<button class="btn btn-secondary js-create-button" data-url="{% url 'api-products-create' object.products_uid %}" type="button"><span class="fa fa-pencil"></span></button>
带有网址路径:
path('api/products/<uuid:slug>/create/', ProductsCreateView.as_view(), name="api-products-create"),
用js(截断函数)
$(function () {
var createProduct = function() {
var slug = '{{ $slug }}'; /* some code/function that gets hold of the slug */
const url = `/api/v1/products/${slug}/create/`;
$.get(url)
.done(function pollAsyncResults(data) {
// bind pollAsyncResults to itself to avoid clashing with
// the prior get request
context: this
// see the URL setup for where this url came from
const pollAsyncUrl = `/api/products/poll_async_results/${data.task_id}`;
})
};
$(".js-create-button").click(createProduct);
});
解决方案
在@31piy 对这个 SO 帖子的回答的帮助下:How to console.log value of a data-attribute in jquery?
要选择所有具有 data-group 属性的元素,可以遍历选择器 [data-group] 选择的元素,并在迭代中使用 data 方法获取该属性的值。
请看下面的例子:
$('[data-group]').each(function() { console.log($(this).data('group')); })
我发现const url
可以表示为:
const url = $(this).data('url');
在控制台中登录时,我会得到我想要的字符串
/api/products/7d49e267-f35d-4161-8eb5-0a815abbb083/create/
因此,完整的代码将变为:
$(function () {
var createProduct = function() {
const url = $(this).data('url');
$.get(url)
.done(function pollAsyncResults(data) {
// bind pollAsyncResults to itself to avoid clashing with
// the prior get request
context: this
// see the URL setup for where this url came from
const pollAsyncUrl = `/api/products/poll_async_results/${data.task_id}`;
})
};
$(".js-create-button").click(createProduct);
});
推荐阅读
- docker - .net sdk 在 alpine linux 上
- c# - 如何在不使用cookie的情况下在asp.net C#中下载文件时阻止ui?
- angularjs - AngularJS 1.6 和 $onInit-Hook
- vba - 根据其他单元格中的值清除单元格内容
- xpages - 如何使用 xpage 将文本文件写入特定文件夹
- c# - 与 WebBrowser 控件中的 AdobeReader 插件交互
- ios - 在展开 Optional 值时意外发现 nil?斯威夫特4
- android - CreateTabBottomNavigator 和滑动手势。刷卡很慢,为什么?
- linux - 如何测量交换信号的 2 个脚本 linux 之间的最大速度?
- django - Django CreateView 未按预期工作