0

我正在构建一个应用程序,其中我在后端使用 Django,并在前端使用 jQuery UI/Backbone。我正在将 Django 生成的表单拉入带有 jQ​​uery.get() 的主干视图内的页面中。这部分工作正常,但现在我想在表单中添加一些 jQuery UI 内容(例如日期选择器、一些打开对话框的按钮等)。所以,这里是相关的代码:

var InstructionForm = Backbone.View.extend({
  render: function() {
    var that = this;
    $.get(
      '/tlstats/instruction/new/',
      function(data) {
        var elements = $(data);
        $('#id_date', elements).datepicker();
        that.$el.html(elements.html());
      }
    };
    return this;
  }
});

路径 /tlstats/instruction/new/ 返回一个带有 Django 生成的表单的 HTML 片段。发生的事情是 input#id_date 正在添加 hasDatePicker 类,并且 datepicker div 被附加到我的 <body> 元素(两者都符合预期),但是当我单击 input#id_date 时,什么也没有发生。没有出现日期选择器小部件,控制台中也没有错误。为什么会发生这种情况?

此外,有点离题,但在试图自己解决这个问题时,我遇到了几个代码示例,其中人们正在执行以下操作:

$(function() {
  $('#dialog').dialog(...);
  ...
});

然后后来:

var MyView = Backbone.View.extend({
  initialize(): function() {
    this.el = $('#dialog');
  }
});

这不是违背了 Backbone 的目的,让所有 jQuery UI 代码完全在任何 Backbone 结构之外吗?还是我误解了Backbone的作用?

谢谢。

4

1 回答 1

1

我认为你的问题就在这里:

$('#id_date', elements).datepicker();
that.$el.html(elements.html());

首先将 datepicker 绑定,然后通过将其转换为 HTML 字符串.datepicker()将其全部丢弃:elements

that.$el.html(elements.html());

然后你把那个字符串放入$el. 当您说 时e.html(),您将一个带有事件绑定和其他所有内容的包装 DOM 对象转换为字符串中的一段简单的 HTML,该过程会丢弃不是简单 HTML 的所有内容(例如事件绑定)。

要么给.html()jQuery 对象本身:

$('#id_date', elements).datepicker();
that.$el.html(elements);

或在添加 HTML 后绑定日期选择器:

that.$el.html(elements);
that.$('#id_date').datepicker();
于 2012-07-25T19:27:27.637 回答