2013-06-01 29 views
21

Tôi đang sử dụng công cụ mẫu Handlebars.
như vậy, tôi có mẫu:Mục giao diện người xemXem cách hiển thị lại mô hình khi thay đổi

Backbone.Model.extend({ 
     urlRoot: Config.urls.getClient, 
     defaults: { 
      contract:"", 
      contractDate:"", 
      companyTitle:"", 
      contacts:[], 
      tariff: new Tariff(), 
      tariffs: [], 
      remain:0, 
      licenses:0, 
      edo:"" 
     }, 
     initialize:function(){ 
      this.fetch(); 
     } 
    }); 

sau đó rối ItemView:

Marionette.ItemView.extend({ 
     template : templates.client, 
     initialize: function() { 
      this.model.on('change', this.render, this); 
     }, 
     onRender: function() { 
      console.log(this.model.toJSON()); 
     }  
    }); 

và sau đó tôi gọi tất cả mọi thứ như:

new View({ 
    model : new Model({id:id}) 
     }) 

và, nó ngay lập tức làm cho một cái nhìn đối với tôi và điều này thật tuyệt. Nhưng sau khi mô hình tìm nạp dữ liệu, nó kích hoạt "thay đổi", vì vậy tôi thấy trong giao diện điều khiển mô hình tuần tự hai lần, và tôi thấy lần đầu tiên mô hình rỗng và sau đó điền một.

Nhưng, chế độ xem KHÔNG được cập nhật.

Làm cách nào để khắc phục sự cố?

P.S. Tôi hiểu, rằng tôi có thể gọi một phương thức trả về khi tìm nạp xong gọi lại. Nhưng tôi cũng cần nó cho các hành động khác, khi người dùng sẽ thay đổi mô hình.

Trả lời

3

Thực ra, Backbone và Marionette đủ thông minh để làm điều đó.
Sự cố trong mẫu và dữ liệu khi tôi tìm thấy nó another question. Vì vậy, tôi kiểm tra lại mọi thứ và có kết quả.

45

Trong View, Bạn có thể sử dụng đoạn mã sau

modelEvents: { 
     'change': 'render'; 
    } 

thay vì

initialize: function() { 
     this.model.on('change', this.render, this); 
    }, 
    onRender: function() { 
     console.log(this.model.toJSON()); 
    } 
+27

chỉ '{ 'thay đổi': 'làm'} 'không lừa quá –

+0

có thể bạn chỉ cho tôi tài liệu xung quanh modelEvents? Cụ thể, tôi đang tìm kiếm một danh sách các modelEvents và giải thích liên quan của họ – splay

Các vấn đề liên quan