2014-05-02 3 views
8

के रूप में $ डेटा से अधिक के साथ Angular-Xeditable's onBeforeSave/onAfterSave विधियों का उपयोग कैसे करें, जब पहले मेरे अनुप्रयोग के साथ कोणीय-जेनेबल का उपयोग करते हुए, मैं किसी ऑब्जेक्ट में एक्स-संपादन योग्य परिवर्तन को सहेजने का तरीका जानने में एक समस्या में भाग गया जिसे एनजी-दोहराना लूप के माध्यम से पहुंचाया गया था।पैरामीटर

प्रलेखन प्राथमिक रूप से सत्यापन के लिए ऑनबेफोर्सव और ऑनफफ़्टर्सव का उपयोग करने पर केंद्रित है, और यह दिखाता है कि इसका उपयोग चीजों को सहेजने के लिए किया जा सकता है, उदाहरण यह नहीं दिखाते हैं कि $ डेटा (या $ अनुक्रमणिका) से अधिक कुछ भी कैसे पास किया जाए आपका onbeforesave/onaftersave विधि। नमूने $ scope.person की तरह कुछ सहेजते हैं, जो ठीक है यदि आपके पास एक आइटम है।

लेकिन क्या होगा अगर 30 की सूची में तीसरा व्यक्ति संपादित किया गया हो? आप निश्चित रूप से उन सभी को सहेजना नहीं चाहते हैं। सरणी में सब कुछ के बजाय संपादित की गई वस्तु को आप कैसे सहेजते हैं?

उत्तर

14

कोणीय-ज़ेडेबल डॉक्स इसे स्पष्ट नहीं करते हैं, लेकिन ऐसा लगता है कि $ डेटा (और $ इंडेक्स) केवल इंजेक्शन मूल्यों को इंजेक्शन दिया जाता है और आप सहेजने/मान्य करने के तरीकों को पूरा करने के लिए बहुत कुछ भी पारित कर सकते हैं। तो आपको क्या करना चाहिए वह ऑब्जेक्ट को पास कर रहा है (या शायद इसकी आईडी)।

निम्न मार्कअप को देखते हुए:,

$scope.updatePerson = function(person) { 
    var ret = PersonService.save(person); // or whatever save mechanism you use 
    // You need to return a error string if save fails, true otherwise 
    if (ret !== null) { // You have to make sure this logic works for your save service 
     return ret; 
    } 
    return true; 
} 
इस के साथ

आप तो आप की तरह किसी भी तरह से बचाने के लिए संभाल कर सकते हैं:

<div ng-repeat="p in people"> 
    <a href="#" editable-text="p.name" onaftersave="updatePerson(p)">{{p.name}}</a> 
</div> 

तब आप अपने नियंत्रक में निम्न कोड होगा। आप केवल $ डेटा या $ इंडेक्स मानों का उपयोग करने के लिए बाध्य नहीं हैं जो Angular-Xeditable आपूर्ति करते हैं। तुम बस के रूप में आसानी कुछ इस तरह कर सकता है:

<div ng-repeat="p in people"> 
    <a href="#" editable-text="p.name" onaftersave="updatePerson(p.id, p.name, p.dohickey)">{{p.name}}</a> 
</div> 

और आपूर्ति की आईडी मूल्य के साथ व्यक्ति के लिए केवल नाम और dohickey क्षेत्रों अद्यतन करें। निश्चित रूप से, आपको अपडेट पैरासन() विधि को बदलना होगा, इसके बजाय आईडी को पहले पैरा के रूप में और नाम और दोहिक्की को दूसरे और तीसरे पैरा के रूप में उम्मीद करनी होगी।

यह भी ध्यान दें कि अगर आप यहां पर किया गया है तो आफ्टरसेव के बजाय BeforeSave पर उपयोग करें, p.name के पास अभी तक नया मान नहीं होगा और आपको नया मान प्राप्त करने के लिए $ डेटा का उपयोग करने के लिए वापस जाना होगा।

+0

मैं पूरे दिन आपके समाधान का प्रयास कर रहा हूं, लेकिन मुझे नहीं पता कि मेरे कोड में क्या गलत है। एक्स-संपादन योग्य दस्तावेज़ उपयोगी नहीं है। आपकी व्याख्या ने मुझे कुछ अच्छी प्रगति दी है, लेकिन मैं अभी भी अपने डेटाबेस में अंतिम बचत नहीं कर सकता, क्या आप [मेरे प्रश्न में] देख रहे होंगे [http://stackoverflow.com/questions/30606614/angularjs-update-डेटाबेस उपयोग करना-एक्स-संपादन योग्य)? – celsomtrindade

+0

निश्चित रूप से, मैं एक नज़र डालेगा। –