2013-10-09 56 views
0

我剛剛開始使用Backbone.js。現在我試圖將商品添加到存儲在localStorage中的購物車中。這是我的看法:視圖在文本中沒有在主幹中更新!插件

define(["jquery" , 
    "underscore" , 
    "backbone" , 
    "text!templates/Cart/itemtemplate.html", 
    "cart", 
    "script" 
],function($ , _ , Backbone , ItemTemplate, Cart , Script){ 

    var items = deserializeJSONToObj(localStorage.getItem("Cart")); 
    var myCart = new Cart(); 
    var newItem = { 
    "ID" : 348, 
    "ItemCode" : "0352862925041", 
    "PartNumber" : "" 
    }; 

    if (!(items instanceof Array)) items = []; 

    var promotionItem = _.template(ItemTemplate,{}); 

    var HomeView = Backbone.View.extend({ 
    initialize: function() { 
      myCart.updateQtyLabel("qtyCart"); 
      $("#containernewpromotion").html(promotionItem); 
    }, 
    el: '.addToCart-form', 
    events : { 
     "click #addToCart" : function(){ 
      myCart.addToCart(newItem); 
      myCart.updateQtyLabel("qtyCart"); 
      $("#containernewpromotion").html(promotionItem); 
      } 
    }, 
    render : function(){ 
     $("#containernewpromotion").html(promotionItem); 
    } 
    }); 
return HomeView; 

當我單擊添加到購物車按鈕,項目數量updateQtyLabel()功能的拉布勒工作,但內容的HTML不與新的內容,從得到的localStorage更新。

感謝您的指點。

回答

1

你準備用var promotionItem = _.template(ItemTemplate,{});
模板通過傳遞第二個參數,{},會強制變量的插值和promotionItem那麼一個固定字符串,當數據被更新不會改變。

你可能想要做的是:

  • 準備編譯模板:

    var promotionItem = _.template(ItemTemplate); 
    
  • 獲得更新的HTML內容:

    var html = promotionItem(myCart.toJSON()); 
    
  • 注入到你元素:

    this.$el.html(html); 
    // in your case, $("#containernewpromotion").html(html); 
    // but I'm really not fond of fixed DOM elements in modules 
    
+0

從來沒有想過這是問題。我剛從'promotionItem'中省略了'{}'就像您在第一個解決方案中指出的那樣。它正在工作! – titi