2013-06-28 10 views
8

में बाइंडिंग कंप्यूटर्ड प्रॉपर्टी मैं एम्बर.जेएस में टेक्स्ट फ़ील्ड में अपना डेटा मॉडल बांधने की कोशिश कर रहा हूं। मॉडल में एक फ़ील्ड है जो मुद्रा मान का प्रतिनिधित्व करता है (उदाहरण के लिए, $ 1,000.50)। उपयोगकर्ता तब इस मान को बदल सकता है।एम्बर टेक्स्टफिल्ड

एम्बर डेटा को संख्या (1000.50) के रूप में प्राप्त करता है - मुद्रा स्वरूपित नहीं। मैं दृश्य को एक गणना की गई संपत्ति में जोड़ता हूं जिसमें अच्छा प्रारूप है। मेरे हैंडलबार टेम्पलेट यहाँ है।

{{input classNames="amount" valueBinding="p.amountFmt"}}</td> 

मेरे मॉडल लगता है:

App.Product = Ember.Object.extend({ 
    amount : 0.00, 
    amountFmt: function() { 
    //example. Do actual formatting with this.get('amount'); 
    var formattedNum = '1,000.50'; 
    return formattedNum; 
    }.property('amount') 
}); 

समस्या है, जब उपयोगकर्ता इनपुट खाने की राशि बदलता है, अपने मॉडल पर अंतर्निहित 'राशि' संपत्ति मैं क्योंकि लगता अपडेट नहीं किया जाता यह गणना की गई संपत्ति के लिए बाध्य है।

उपयोगकर्ता के इनपुट, पार्स और आवश्यक होने पर मान्य करने का सही तरीका क्या है, और इसे 'राशि' संपत्ति में संग्रहीत करें? क्या मुझे दो गुणों के बीच बाइंडिंग/पर्यवेक्षक का उपयोग करना चाहिए? यह कैसे काम करेगा?

आखिरकार, 'राशि' संपत्ति वह है जो सर्वर की तरफ बढ़ती है। मैं वास्तव में गणना की गई संपत्ति को यूआई स्वरूपण करने के लिए एक जगह पर विचार करता हूं। मैं आमतौर पर इस तरह के प्रारूपण के लिए हैंडलबार्स सहायक का उपयोग करता हूं लेकिन आप हैंडलबर्स सहायक के परिणामों के साथ टेक्स्टफिल्ड के मूल्य बाइंडिंग को संयुक्त नहीं कर सकते हैं।

आपकी मदद के लिए अग्रिम धन्यवाद! एंड्रयू

उत्तर

7

गणना की गई संपत्ति के लिए कार्य amountFmt संदर्भ के आधार पर गेटटर और सेटर दोनों के रूप में कार्य करता है। यह हस्ताक्षर amountFmt(key, [value]) है। मान वैकल्पिक है और जब मूल्य बदलना है तो केवल तभी पारित किया जाता है।

amountFmt: function(key, value) { 
    if (value) { 
    // setter 
    } else { 
    // getter 
    } 
}.property('amount') 
+0

डांग गीना मैं हमेशा के लिए इस उत्तर की तलाश कर रहा हूं! उबर सहायक! मैंने इसे दस्तावेज़ों में कभी नहीं देखा है। क्या यह दस्तावेज नहीं है या मैंने इसे अभी अनदेखा किया है? – bfcoder

+0

यह अब http://emberjs.com/api/classes/Ember.computed.html#content में दस्तावेज किया गया प्रतीत होता है। गणना की गई संपत्ति फ़ंक्शन का उपयोग अब हैश के साथ किया जा सकता है जो एक प्राप्त और सेट फ़ंक्शन प्रदान करता है। –

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