2012-02-14 8 views
6

मैं मूंछ के साथ बैकबोन.जेएस का उपयोग कर रहा हूं, इसलिए मेरे tempaltes को प्रस्तुत करने के लिए मैं MyModel.toJSON() को कॉल करता हूं। यह मुझे विशेषताओं तक पहुंच के साथ छोड़ देता है। मेरे पास कुछ विशेषताओं की गणना कैसे की जा सकती है?बैकबोन.जेएस कैसे गणना गुणों के साथ मॉडल को संभालता है

मैंने बैकबोन.जेएस दस्तावेज को देखा और यह वैध() को ओवरराइड करने के लिए काम कर सकता है लेकिन यह एक हैक जैसा लगता है और अनंत लूप का कारण बन सकता है।

मैंने एक विशेषता के बजाय एक विशेषता बनाने की कोशिश की, लेकिन जब मैं इसे उपयोग करने का प्रयास करता हूं तो मूंछ को कोई मूल्य नहीं मिलता है।

+0

toJSON ओवरराइड करें: इसे मूल toJSON पर कॉल करें, फिर परिणामस्वरूप अपने गणना किए गए गुण जोड़ें। – jdigital

उत्तर

3

इस प्रकार मैं वर्तमान में इसे कर रहा हूं। मॉडल को प्रारंभ करते समय मैं गणना करता हूं, और स्वचालित रूप से पुन: गणना करने के लिए मॉडल में परिवर्तनों के लिए श्रोता जोड़ता हूं।

... 
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

क्या आपने अनंत लूप बनाने से रोकने के लिए कुछ अलग किया था? मैंने कोशिश की और मैं एक मॉडल बना सकता हूं, लेकिन फिर पहली बार मैंने उस पर कुछ भी सेट किया, मुझे अनंत लूप मिलता है। –

+0

ओह! माफ़ कीजिये! मैं 'सेट' गणना के भीतर '{{चुप: सत्य} 'भूल गया था – abraham

0

मैं जानता हूँ कि अगर मैं सवाल सही ढंग से समझ नहीं है, लेकिन:

आप वास्तविक मॉडल मूंछें को पारित नहीं कर सकते? इसलिए उदाहरण के लिए जब आप

render: ->  
rendered_content = @template({model: @model}) 
$(@.el).html rendered_content 
@ 

आप टेम्पलेट में वास्तविक मॉडल को पार कर रहे हैं। तो फिर तुम एक टेम्पलेट

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


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

है और मॉडल में आप getTotalPrice घोषित()

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

मैं वास्तव में मेरी टेम्पलेट्स में पारित कभी नहीं @ model.toJSON, वास्तविक मॉडल alawys।

+0

यह काम नहीं करता है क्योंकि मूंछ (http://mustache.github.com/) जानबूझकर तर्क-कम है। आप ऑब्जेक्ट से गुण प्राप्त कर सकते हैं लेकिन आप कॉल नहीं कर सकते .get() –

संबंधित मुद्दे