0

我正在尝试在模板中应用一个日期选择器,然后将该模板添加到 DOM。我可以通过首先将模板添加到 DOM(使用 $.each)来做到这一点,但我现在正在分离职责(使用 Backbone),我需要按此顺序完成。我尝试在我的模板上下文中使用 replaceWith :

$("input[type=date]", template).replaceWith(function() {
    $(this).datepicker({dateFormat : "yy-mm-dd"});
    return this.outerHTML;
});
return Mustache.render(template, this.model.toJson);

但是模板没有更新,并且 replaceWith 只返回一个包含我更新的输入的数组。我觉得答案并不遥远,但我被困在这里。我可以在应用日期选择器之前或之后使用 Mustache 渲染模板,这不是问题。

有任何想法吗 ?

4

1 回答 1

2

Mustache.render将根据模板template和数据返回一些 HTML this.model.toJson(应该是this.model.toJSON(),不是吗?)。所有的 jQuery UI 内容和 jQuery 事件都绑定到 DOM 元素,而不是 HTML 文本,所以无论绑定到什么template,都不会通过 Mustache 保留下来。

您需要将所有内容绑定Mustache.render. 更像这样的东西:

render: function() {
    var template = ...
    var html = Mustache.render(template, this.model.toJSON());
    this.$el.append(html);
    this.$('input[type=date]').datepicker({dateFormat: 'yy-mm-dd'});
    return this;
}

然后无论叫什么render都会$something.append(v.render().el)

于 2012-11-15T17:31:00.750 回答