模板上添加了新$el,其中包含在主干视图中返回的 ajax 成功数据

New $el added on template with the data returned on ajax success in Backbone View

本文关键字:视图 返回 数据 成功 ajax 包含 添加 el      更新时间:2023-09-26

我有一个主干视图,除其他外,它执行一个ajax调用,获取用户的日期输入(从和到,从js datepicker小部件),相应的django视图根据这些输入查询数据库并返回新的json-ed数据。现在,在成功时,我尝试将新数据附加到 el,但 el 也会保留初始数据。更重要的是,每次我选择新日期时,都会在模板上的前一个div 下方添加新的div。我应该如何解决这个问题?

我或多或少是这样做的:

' TestView = Backbone.View.extend ({ template: _.template($("#test-template").html()), url: $("#test-url").data('url'),

render: function() {
  var template = this.template;
  var url = this.url;
  var el = $(this.el);
  var _this = this;
  var currentDate = new Date();
  var day = currentDate.getDate();
  var month = currentDate.getMonth() + 1;
  var year = currentDate.getFullYear();
  cur_date = month + "/" + day + "/" + year;
  var m = month - 1 ;
  prev_date = m + "/" + day + "/" + year;
  data_send = {period_from: prev_date, period_to:cur_date};
  $.get(url, data_send, function(data) {
    var pigs = $.parseJSON(data);
    el.append(template(pigs));
    _this.event();
    $( ".date-popup" ).datepicker();
  });
  return this;
},
event: function(){
  _this = this;
  var $to = $('#to_id');
  var template = this.template;
  var url = this.url;
  var el = $(this.el);
  $to.on('change', function(event) {
     var from = $('#from_id').val();
     var to = $('#to_id').val();
     $.ajax({
        type:"GET",
        url :url,
        data: {
            period_from: $('#from_id').val(),
            period_to: $('#to_id').val()
        },
        datatype:"json",
        error:function(data){alert('Error:'+data);},
        success:function(data){
            var pigs = $.parseJSON(data);
            el.append(template(pigs));
            _this.event();
        }
      });
   });
 }

});'

如果您

不希望显示旧数据,那么可能会使用el.html(template(pigs))而不是el.append(template(pigs))会有所帮助。