我正在使用Mongoose,Node,Backbone堆栈并使用Handlebars构建SPA。用户注册一个或多个课程。然后,用户可以进入他的课程列表,如果他选择则取消。 API工作,我可以从数据库中删除课程,从控制台进行特定URL的ajax调用。问题是我需要ajax调用来从把手模板中获取变量。如何从我的车把模板中捕获{{_id}}并将其传递给模板外的AJAX删除请求?
template: Handlebars.compile(
'<h4>{{local.petname}} is a busy beast!</h4>'+
'<h2>Upcoming Courses: </h2>' +
'<ul>'+
'{{#each signup}}' +
'<li><h3>{{name}}</h3>{{coursDay}}{{time}}{{location}}</li>' +
'<a href="/test/signups/{{_id}}" data-id="{{_id}}"" class="btn btn-danger confirm-delete">Remove Course</a><br/><br/>' +
'<li>{{_id}}</li>'+
'{{/each}}'+
'</ul>'
),
这是我的ajax请求; attrID只返回数组中第一个项的ObjectID
deleteItem: function(event) {
event.preventDefault();
var attrID = $('.btn-danger').data();
console.log(attrID);
jQuery.ajax({
url: "/test/signups/" + attrID,
type: "DELETE",
success: function (data, textStatus, jqXHR) {
console.log("Post response:");
console.dir(data);
console.log(textStatus);
console.dir(jqXHR);
}
});
}
答案 0 :(得分:2)
我有点不确定你想要调用deleteItem()
函数的位置,但问题在于jQuery选择器:
$('.btn-danger')
选择您的所有链接。你把它们放回jQuery包装列表中。然后,方法data()
仅应用于列表的第一项,因此仅在您的第一个节点中生成。您还应该提供参数'id'
,否则您将再次获得一个数组。
假设您希望所有链接都执行AJAX调用,您可以调用:
$('.btn-danger').on('click', function(event) {
event.preventDefault();
var attrID = $(this).data('id');
console.log(attrID);
$.ajax({ ... });
});
修改:用$(...).live()
替换$(...).on()
(已弃用)。
您的手柄模板data-id="{{_id}}""
也存在问题,应删除第二个引号。