2013-06-01 10 views
21

Używam silnika szablonu Handlebars.
tak, mam Model:Marionetka ItemView, jak ponownie renderować model na zmianę

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(); 
     } 
    }); 

następnie Marionette ItemView:

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

a potem zadzwonić wszystko jak:

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

i to od razu wygenerować widok dla mnie i to jest fajne. Ale po pobraniu danych przez model jest to "zmiana" wyzwalacza, więc widzę w modelu szeregowym konsoli dwa razy i widzę po raz pierwszy pusty model, a następnie wypełniony.

Jednak widok NIE jest aktualizowany.

Jak mogę to naprawić?

P.S. Rozumiem, że mogę wywołać metodę renderowania podczas pobierania wykonanego wywołania zwrotnego. Ale potrzebuję go również do dalszych działań, gdy użytkownik zmieni model.

Odpowiedz

3

W rzeczywistości kręgosłup i marionetka są wystarczająco inteligentne, aby to zrobić.
Problem był w szablonie i danych, ponieważ znalazłem go another question. Sprawdziłem wszystko i otrzymałem wynik.

45

w widoku, można użyć następującego kodu

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

zamiast

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

tylko '{ 'zmiana': 'czynią'}' nie podstęp zbyt –

+0

można wskazać mi dokumentacja wokół modelEvents? W szczególności szukam listy modelEvents i związanych z nimi wyjaśnień – splay