5

私は とbackbone.jsの初心者ですunderscore.js

HTML :

<div id="cartlist">
<script type="text/template" id="cart_template">

</script>
</div>

ビューファイルを呼び出した場所:

<script type="text/javascript" src="webcore/views/CartView.js"></script>
</body>

JS 関数 (javascript プロジェクトでうまく動作します):

 function Cart(){
    ......
    this.showCart = function (){
    var item = deserializeJSONToObj(window.localStorage.getItem(Cart.storageName));
    var str = '<table id="showcart">';
    str += '<tr><td class="cartitemhead">Item to buy</td><td class="cartitemhead" style="text-align: center;">Quantity</td></tr>';
    $.each(item, function(i, item) {
        str += '<tr><td><table class="verticallist"><tr><td rowspan="4" style="width: 120px;"><img src="' + item.PictureName + '" alt="Product" width="95px"/></td><td style="font-weight: bold;">'+trimString(item.Name,50)+'</td></tr><tr><td><i>Available in Stock(s)!</i></td></tr><tr><td><i>Rating:   650Va-390w Input:   Single</i></td></tr></table></td><td class="centertxt">'+item.QuantityInCart+'</td></tr>';
    });
    str += '</table>';
    return str;
 } 

これはビューです:

var myCart = new Cart();
CartList = Backbone.View.extend({
initialize:function(){
    this.render();
},
render: function(){
    var template = _.template( $("#cart_template").html(), {} );
    this.$el.html( template );
}
});
var cart_view = new CartList({ el: $("#cartlist").html(myCart.showCart()) });
  1. ビュー テンプレートを呼び出そうとすると、エラーが発生しますUncaught TypeError: Cannot call method 'replace' of undefined - underscore.js。間違いを見つけるのを手伝ってください。

  2. クラス内のstr文字列をofに変換するにはどうすればよいですか。Carttemplateunderscore.js

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

11

あなたの問題は#cart_template、DOM に保存している場所にあると思います。

<div id="cartlist">
    <script type="text/template" id="cart_template">
    </script>
</div>

CartList次のように作成します。

var cart_view = new CartList({ el: $("#cartlist").html(myCart.showCart()) });

あなたがこれを言うとき:

$("#cartlist").html(myCart.showCart())

中にあったものはすべてなくなりました。#cartlist特に、#cart_templateなくなってしまいました。次に、内部CartListでこれを実行しようとします:

_.template( $("#cart_template").html(), {} );

しかし#cart_template、その時点で$('#cart_template').html()はそれ以上ありません。それundefinedがエラーの原因です。内部的_.templateに呼び出しますが、文字列ではなくテンプレートとして指定しています。replaceundefined

#cart_template解決策は、外側に移動すること#cartlistです。

ビューのコンストラクターに を渡さないこともお勧めしますel。ビューは独自のビューを作成しel、呼び出し元はelそれを DOM の必要な場所に配置する必要があります。そうすれば、ビューがその要素を完全に担当し、ゾンビやイベントの問題が少なくなります。

于 2013-09-25T02:01:02.157 に答える