下划线模板选择器

时间:2012-06-02 17:27:50

标签: javascript backbone.js underscore.js

我使用下划线模板来渲染我的页面。我使用时会出现问题:

$(function(){
   console.log($('.input-placeholder'));
});

我有时可以访问它们,有时它只是不起作用,因为在文档加载后页面会被渲染。

所以我用

$('#application').html(_.template('<div class="input-placeholder"></div>', {}));

它有时会打印到控制台,它找到了输入占位符,但并不是所有时间。如何确保在加载模板后触发$(function(){})。

由于

2 个答案:

答案 0 :(得分:1)

http://lostechies.com/derickbailey/2011/11/09/backbone-js-object-literals-views-events-jquery-and-el/

在渲染方法中阅读模板:


Backbone.View.extend({
  render: function(){
    var html = _.template($("#my-template"));
    this.$el.html(html);
  }
});

然后等到DOMReady事件触发后再启动应用程序,创建视图实例并进行渲染。

答案 1 :(得分:0)

我不确定您要实现的目标,但您可以尝试使用Derick解决方案的替代方案。

Backbone.View.extend({
    el: document.createElement('div'),
    template: null,
    render: function(){
        if(this.template === null){
            this.template = _.template($('#my-template'));
        }
        this.$el.html(this.template({}));
    }
});

请注意,如果你这样做:

var something = _.template('<div><%= haha %></div>');

something成为一个函数,当你提供数据时会给你html,你不应该每次都重新编译。