web-dev-qa-db-ja.com

キャッチされないTypeError:未定義のbackbone.jsのメソッド 'replace'を呼び出すことができません

私はbackbone.jsを使用して簡単なRSSアプリを開発しようとしています。私はこのbackbone.jsを使用しています チュートリアル 。テンプレートを定義すると、2行目(テンプレート)で次のエラーが発生します。チュートリアルでtagName: "li"が定義されている理由を誰かに教えてもらえますか?

キャッチされないTypeError:未定義のbackbone.jsのメソッド 'replace'を呼び出すことができません

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>

ありがとう

12
jsp

ここでエラーが発生しています:

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

__.template_の内部の一部には、コンパイルされたテンプレート関数を生成する途中で、コンパイルされていないテンプレートテキストに対して _String#replace_ を呼び出すことが含まれます。その特定のエラーは通常、あなたがこれを効果的に言っていることを意味します:

__.template(undefined)
_

これは、$('#tmpl_sourcelist').html()と言ったときにDOMに_#tmpl_sourcelist_がない場合に発生する可能性があります。

いくつかの簡単な解決策があります。

  1. ビューを読み込もうとする前に_<script>_が来るように、_#tmpl_sourcelist_の順序を調整します。
  2. コンパイルされたテンプレート関数を、ビューの「クラス」定義ではなく、ビューのinitializeに作成します。

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

tagNameに関する限り、 細かいマニュアル には次のように書かれています。

el_view.el_

[...] _this.el_は、ビューのtagNameclassNameid、およびattributesプロパティ(指定されている場合)から作成されます。そうでない場合、elは空のdivです。

だからあなたの見解でこれを持っている:

_tagName: 'li'
_

これは、バックボーンがビューのelとして新しい_<li>_要素を自動的に作成することを意味します。

47
mu is too short