2012-01-29 1 views
5

Tôi có quan điểm như sau:Checkbox vẫn không được kiểm soát sau khi kích hoạt sự kiện

window.DmnView = Backbone.View.extend({ 
     template: _.template($("#tmpl_dmnListItem").html()), 
     events: { 
      "click .getWhois": "showWhois", 
      "click .getDomain": "toBasket" 
     }, 
     initialize: function() { 
      this.model.bind('change', this.render, this); 
      this.model.bind('destroy', this.remove, this); 
      this.bind('toBasket', dmnListApp.toBasket, this); 
     }, 
     render: function() { 
      return $(this.el) 
        .attr("class", this.model.get("free") ? "dmnItem green" : this.model.get("checked") ? "dmnItem red" : "dmnItem red loader") 
        .html(this.template(this.model.toJSON())); 
     }, 
     remove: function() { 
      $(this.el).remove(); 
     }, 
     showWhois: function() { 
      showBoxes(this.model.get("info")); 
      return false; 
     }, 
     toBasket: function() { 
      this.model.toBasket(); 
      this.trigger('toBasket'); 
     } 
    }); 

    window.DmnListApp = Backbone.View.extend({ 
     el: $("#regWrap"), 
     events: { 
      "keypress #dmnName": "checkAll" 
     }, 
     initialize: function() { 
      this.input = this.$("#dmnName"); 
      this.list = this.$("#dmnList"); 
      this.basket = this.$("#dmnBasket"); 
      dmnList.bind('add', this.addOne, this); 
      dmnList.bind('all', this.render, this); 
     }, 
     render: function() { 

     }, 
     addOne: function(dmnItem) { 
      var view = new DmnView({model : dmnItem}); 
      this.list.append(view.render()); 
     }, 
     checkOne: function(name, zone, price, days) { 
      dmnList.create({name: name, zone: zone, price: price, days: days}); 
     }, 
     checkAll: function(e) { 
      var name = this.input.val(); 
      if (!name || e.keyCode != 13) return; 
      if (name == "") 
       name = "yandex"; 
      dmnList.destroyAll(); 
      var zoneList = dmnList.domainsInfo.Name; 
      var costList = dmnList.domainsInfo.CostOrder; 
      var daysList = dmnList.domainsInfo.DaysToProlong; 
      var parent = this; 
      $.each(zoneList, function(key, zone) { 
       parent.checkOne(name, zone, costList[key], daysList[key]); 
      }); 
      this.input.val(""); 
     }, 
     toBasket: function(){ 
      if (this.model.get("inBasket")){ 
       dmnListApp.basket.append($(this.el)); 
      }else{ 
       dmnListApp.list.append($(this.el)); 
      } 
     } 
    }); 

Và tôi có các mẫu sau cho DmnItem Xem:

<script id="tmpl_dmnListItem" type="text/template"> 
    <%= checked&&free ? "<input type='checkbox' class='getDomain' />" : ""%><%= name %>.<%= zone %> <%= (free || !checked) ? (checked) ? '<p class="fr">'+price+" руб./"+days+'</p>' : "" : "<a href='#' class='getWhois fr'>WhoIs</a>" %> 
</script> 

DmnView lắng nghe cách nhấp vào phần tử với các "getDomain " lớp học. Phần tử này là hộp kiểm. Tôi nhấp vào hộp kiểm này. Và sau khi gọi phương thức toBasket() trong cả hai chế độ xem tôi thấy hộp kiểm vẫn chưa được chọn. Tại sao nó lại xảy ra vậy?

Trả lời

5

Lỗi đang hiển thị. Sau khi thiết lập giá trị mới cho hàm render của thuộc tính của khung nhìn được gọi và "vẽ lại" hộp kiểm (vì vậy, nó có thể là lỗi của xương sống - sau khi hiển thị lại, trạng thái hộp kiểm không được lưu). Vì vậy, tôi đã thêm một dòng ngắn vào mẫu, thêm thuộc tính "đã chọn" cho hộp kiểm nếu cần.

+0

nó tạo ra nhiều vấn đề :( –

0

Có thể có gì đó không ổn trong chức năng toBasket (hoặc loại khác). Tập lệnh có thể dừng trước khi kết thúc trình xử lý của bạn.