私は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>
ありがとう
ここでエラーが発生しています:
_template: _.template($('#tmpl_sourcelist').html()),
_
__.template
_の内部の一部には、コンパイルされたテンプレート関数を生成する途中で、コンパイルされていないテンプレートテキストに対して _String#replace
_ を呼び出すことが含まれます。その特定のエラーは通常、あなたがこれを効果的に言っていることを意味します:
__.template(undefined)
_
これは、$('#tmpl_sourcelist').html()
と言ったときにDOMに_#tmpl_sourcelist
_がない場合に発生する可能性があります。
いくつかの簡単な解決策があります。
<script>
_が来るように、_#tmpl_sourcelist
_の順序を調整します。コンパイルされたテンプレート関数を、ビューの「クラス」定義ではなく、ビューのinitialize
に作成します。
_window.SourceListView = Backbone.View.extend({
tagName:"li",
initialize:function () {
this.template = _.template($('#tmpl_sourcelist').html());
//...
_
tagName
に関する限り、 細かいマニュアル には次のように書かれています。
el_
view.el
_[...] _
this.el
_は、ビューのtagName
、className
、id
、およびattributes
プロパティ(指定されている場合)から作成されます。そうでない場合、elは空のdiv
です。
だからあなたの見解でこれを持っている:
_tagName: 'li'
_
これは、バックボーンがビューのel
として新しい_<li>
_要素を自動的に作成することを意味します。