遗漏的类型错误:不能调用方法“取代” Backbone.js的未定义的(uncaught TypeE

2019-07-19 18:04发布

我试图开发使用Backbone.js的一个简单的RSS应用程序。 我使用这个Backbone.js的教程 。 我越来越以下错误,在第2行(模板),限定所述模板时。 可有人还告诉我,为什么是标签名:“礼”在本教程中定义?

遗漏的类型错误:不能调用方法“取代” 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>

谢谢

Answer 1:

你得到你的错误就在这里:

template: _.template($('#tmpl_sourcelist').html()),

部分_.template的内部需要调用String#replace上的方式来生产编译模板函数未编译模板文本。 这个特别的错误通常意味着你实际上是说这样的:

_.template(undefined)

如果没有可能发生#tmpl_sourcelist在DOM当你说$('#tmpl_sourcelist').html()

有几个简单的解决方案:

  1. 调整你<script>为了让您的#tmpl_sourcelist来尝试加载你的看法了。
  2. 创建视图的编译模板函数initialize ,而不是在视图中的“类”的定义:

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

至于tagName得好, 精细的手工有这样一段话:

埃尔 view.el

[...] this.el从视图的创建tagNameclassNameidattributes ,如果指定的属性。 如果不是, 萨尔瓦多是一个空div

所以,在你看来有这样的:

tagName: 'li'

意味着骨干会自动创建一个新的<li>元素为您的视图的el



文章来源: uncaught TypeError: Cannot call method 'replace' of undefined backbone.js