从Handlebars模板进行AJAX调用?

时间:2014-05-30 17:51:32

标签: ajax backbone.js handlebars.js

我正在使用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); 
    }
  });
}

1 个答案:

答案 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}}""也存在问题,应删除第二个引号。