2012-07-30 18 views
6

मेरे ऐप के शीर्ष पर थोड़ा पीला "सेविंग"/"सहेजा गया" सूचक संदेश बनाने के लिए, मुझे एक बूलियन प्रॉपर्टी दिखाना चाहती है या नहीं किसी भी एम्बर-डेटा रिकॉर्ड वर्तमान में उड़ान में हैं।एम्बर-डेटा: सहेजने/सहेजे गए फ़्लैश संदेश को कैसे बनाएं

मैं इस कोशिश की:

App.store = DS.Store.create 
    isSaving: (-> 
    for record in this.get('recordCache') 
     if record?.getPath('stateManager.currentState.name') == 'inFlight' 
     return true 
    return false 
).property('[email protected]') 

लेकिन तब मुझे पता चला कि recordCache नमूदार नहीं है।

मैं लेनदेन का उपयोग नहीं करता, केवल App.store.commit(), इसलिए मैंने App.store.get('defaultTransaction') पर देखा, लेकिन इससे कुछ भी उपयोगी नहीं हुआ।

मैं RESTAdapter का उपयोग कर रहा हूं, इसलिए यदि मैं इसे जानकारी का यह टुकड़ा देने में विस्तार कर सकता हूं, तो यह भी काम करेगा।

+0

डिफ़ॉल्ट हैtransaction.buckets.inflight अवलोकन योग्य है? –

+0

क्या आपने कभी कुछ भी पता लगाया है? मेरे पास एक ऐप पर एक समाधान है जो मैं बना रहा हूं, लेकिन मुझे यह पसंद नहीं है। यह DS.Model क्लास को बढ़ाता है और जब भी कोई मॉडल सहेजा जाता है तो अधिसूचना को आग लगाने के लिए संपत्ति को अद्यतन किया जाता है। –

+0

नहीं, मैंने नहीं किया। आप अपने समाधान को उत्तर के रूप में क्यों नहीं पोस्ट करते हैं, भले ही यह स्टॉप-गैप हो? –

उत्तर

2

ठीक है, आप बस एक अपडडेट संपत्ति के साथ एक बेस मॉडल बना सकते हैं जो आपके अधिसूचना संदेश को प्रदर्शित करता है, फिर आपके प्रत्येक मॉडल का विस्तार होता है। यह वास्तव में एक रोकने के अंतराल के समाधान है, लेकिन यह समय से किया जा रहा के लिए काम करता है:

App.Model = DS.Model.extend 
    didUpdate: -> 
     # invoke your notification 
     alert("All changes saved!") 

App.User = App.Model.extend() 

हालांकि .... यह हर रिकॉर्ड है कि अद्यतन किया जाता है के लिए सक्रिय हो जाएगा। तो आप शायद अपनी अधिसूचना कक्षा को इस तरह से बनाना चाहते हैं कि यह एक बार में एक सहेजी गई अधिसूचना को और अधिक नहीं खोल पाएगा ... लेकिन यह आपके ऊपर है।

मैं वर्तमान में इस पुल अनुरोध https://github.com/emberjs/data/pull/376 से कुछ बुनियादी सर्वर-सत्यापन विधियों को लागू करने पर काम कर रहा हूं, और मुझे आशा है कि मैं प्रतिबद्धताओं की स्थिति का निरीक्षण करने के लिए एक बेहतर तरीका के साथ आऊंगा (और अगर मैं करता हूं तो पाठ्यक्रम वापस यहां पोस्ट करें)।

4

मॉडल, नियंत्रक और/या दृश्य क्यों विस्तार नहीं:

DS.Model.reopen({ 
    didCreate: function() { 
     this.set('persisted', true); 
    }, 
    didUpdate: function() { 
     this.set('persisted', true);  
    }, 

    resetPersistenceFlag: function(){ 
     this.set('persisted', false); 
    }.observes('isDirty') 

}); 

Ember.Controller.reopen({ 
    contentPersistedObserver: function() { 
     if (this.get('content.persisted') === true) { 
      //do stuff here 
     } 
    }.observes('content.persisted') 
}); 

Ember.View.reopen({ 
    controllerContentPersistedObserver: function() { 
     if (this.get('controller.content.persisted') === true) { 
      //do stuff here 
     } 
    }.observes('controller.content.persisted') 
});​ 

इस तरह जब मॉडल सहेजा जाता है अपने नियंत्रक/दृश्य पता चल जाएगा। यह निर्माण/अद्यतन नियंत्रकों के लिए आग लगेगा, लेकिन नियंत्रकों के लिए जो सरणी प्रबंधित करते हैं, यह नहीं होगा।

+0

मुझे यह वास्तव में बहुत पसंद है, और चीजें वापस नियंत्रक में वापस ले जाती हैं जहां वे संबंधित हैं। लगभग सरल त्रुटि को संभालना शुरू कर सकता है। अभी भी वह समस्या होगी जहां नियंत्रक अद्यतन किए गए प्रत्येक रिकॉर्ड के लिए आग लगाएगा ... इसलिए मेरे मामले में यदि मेरे पास 10 रिकॉर्ड अपडेट हैं तो मुझे 10 अलर्ट विंडो मिलेंगी ... लेकिन यह इस सवाल के दायरे से बाहर है । –

+0

यह थोड़ा गलत है, उसमें क्रेट तुरंत आग लगती है, और इसलिए इसका मतलब यह नहीं है। didUpdate आपको केवल सत्य पर सेट करने की आवश्यकता है। – jhorman

0

इस के लिए एक बहुत सरल समाधान है:।

App.MyView = Ember.View.extend({ 

    init: function() { 
     this._super(); 
     var self = this; 
     this.get('controller').content.on('didUpdate', function() { 
      self.SomeCoolUpdateFunctionForMyView(self.$()); 
     }); 
    } 
}); 

स्वयं $() आपके विचार के jQuery प्रतिनिधित्व करने के लिए संदर्भ।

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