Javascript 未捕获类型错误:无法调用方法';更换';未定义主干的定义

Javascript 未捕获类型错误:无法调用方法';更换';未定义主干的定义,javascript,html,templates,backbone.js,underscore.js,Javascript,Html,Templates,Backbone.js,Underscore.js,我正在尝试使用backbone.js开发一个简单的RSS应用程序。我正在使用这个backbone.js。在定义模板时,第2行(模板)出现以下错误。 有人能告诉我为什么在教程中定义了标记名“li” 未捕获的TypeError:无法调用未定义的方法“replace” backbone.js Javscript window.SourceListView = Backbone.View.extend({ tagName:"li", template: _.template($('#tm

我正在尝试使用backbone.js开发一个简单的RSS应用程序。我正在使用这个backbone.js。在定义模板时,第2行(模板)出现以下错误。 有人能告诉我为什么在教程中定义了标记名“li”

未捕获的TypeError:无法调用未定义的方法“replace” backbone.js

Javscript

window.SourceListView = Backbone.View.extend({
    tagName:"li",
    template: _.template($('#tmpl_sourcelist').html()),

    initialize:function () {
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },

    render:function (eventName) {
        $(this.$el).html(this.template(this.model.toJSON()));
        return this;
    },

    close:function () {
        $(this.el).unbind();
        $(this.el).remove();
    }
});
HTML

 <script type="text/template" id="tmpl_sourcelist">
                        <div id="source">
                        <a href='#Source/<%=id%>'<%=name%></a>
                        </div>
                </script>


谢谢

您的错误就在这里:

template: _.template($('#tmpl_sourcelist').html()),
\uU4.template
内部的一部分涉及在生成已编译模板函数的过程中调用未编译的模板文本。这种特殊的错误通常意味着你实际上是这样说的:

_.template(undefined)
当您说
$('.\tmpl\u sourcelist').html()
时,如果DOM中没有
\tmpl\u sourcelist
,就会发生这种情况

有几个简单的解决方案:

  • 调整
    顺序,使
    #tmpl_sourcelist
    在您尝试加载视图之前出现
  • 在视图的
    initialize
    中创建编译后的模板函数,而不是在视图的“类”定义中:

    window.SourceListView = Backbone.View.extend({
        tagName:"li",
        initialize:function () {
            this.template = _.template($('#tmpl_sourcelist').html());
            //...
    
  • 就标记名
    而言,
    表示:

    el
    view.el

    […]
    此.el
    是从视图的
    标记名
    类名
    id
    属性(如果指定)创建的。如果不是,el是一个空的
    div

    因此,在您看来:

    tagName: 'li'
    

    这意味着主干将自动创建一个新的
  • 元素作为视图的
    el

    尝试在没有数据的情况下运行模板,并查看您得到了什么…this.$el.html(this.template())它在第2行出错(模板:_.template($('#tmpl_sourcelist').html())。不知道你推荐什么。回答得很好!它在我的处境中帮助了我,因为$(“#target”).html(35; template(template,[posts]);我在找一个id=target,但它是一个类。@Anthony:谢谢。因此,同样的
    \uuu.template(未定义)
    问题就隐藏起来了。