2012-02-14 16 views
6

Używam Backbone.JS z Moustache, więc aby wyrenderować moje tempalt, nazywam MyModel.toJSON(). Pozostawia mi to tylko dostęp do atrybutów. Jak mogę mieć pewne atrybuty, które zawsze są obliczane?W jaki sposób obsługiwane są modele Backbone.JS z atrybutami obliczanymi

Spojrzałem na dokumentację Backbone.JS i może to wpłynąć na zastąpienie validate(), ale wydaje się, że to hack i może prowadzić do nieskończonych pętli.

Próbowałem również uczynić atrybut być funkcja zamiast wartości, ale wąsy nie otrzyma wartość, gdy próbuję go użyć.

+0

Zastąp wartość toJSON: wywołaj oryginał do JSON, a następnie dodaj obliczone atrybuty do wyniku. – jdigital

Odpowiedz

3

Tak właśnie to robię. Wykonuję obliczenia podczas inicjowania modelu i dodawania detektora zmian w modelu do automatycznego przeliczania.

... 
initialize: function() { 
    console.log('Lead:initialize'); 
    _.bindAll(this, 'validate', 'calculate'); 
    this.bind('change', this.setCalculations, this); 
    this.setCalculations(); 
}, 
setCalculations: function() { 
    this.set({ calculations: this.calculate() }, { silent: true }); 
}, 
calculate: function() { 
    // do the calculations and return 
}, 
... 
+0

Czy zrobiłeś coś innego, aby zapobiec tworzeniu się nieskończonej pętli? Próbowałem tego i mogę stworzyć model, ale wtedy, gdy po raz pierwszy ustawiłem na nim coś, dostaję nieskończoną pętlę. –

+0

Och! Przepraszam! Zapomniałem ', {cichy: prawda}' wewnątrz 'setCalculations' – abraham

0

nie wiem, czy dobrze rozumiem pytanie, ale:

nie można przekazać rzeczywisty model wąsy? więc na przykład, gdy renderujesz

Przechodzisz rzeczywisty model do szablonu. Wtedy masz szablon

<td class="quantity">   
    <input type="text" value="<%= model.get('quantity') %>" name="quantity" /> 
</td> 


<td> 
    <%= model.getTotalPrice() %> 
</td> 

A w modelu zadeklarować getTotalPrice()

getTotalPrice: -> 
    total_price = @get('price') * @get('quantity') 
    total_price + total_price * @get('tax_rate') 

nigdy faktycznie przechodzą @ model.toJSON w moich szablonów alawys rzeczywistego modelu.

+0

To nie działa, ponieważ wąsy (http://mustache.github.com/) są celowo logiczne. Możesz uzyskać atrybuty poza obiektem, ale nie możesz wywołać metody .get() –

Powiązane problemy