2013-01-14 11 views
22

मेरे पास एक साधारण सवाल है। मैं कोड के 2 लाइनों के साथ एक समारोह में देख रहा हूँ: यदि मैं पहली पंक्ति है, जो अपने संग्रह से मॉडल को दूर माना जाता है बाहर टिप्पणी, बातें (उद्देश्य के अनुसार कार्य करने लगते हैंबैकबोन model.destroy(): संग्रह से स्पष्ट हटाने को आवश्यक है?

deleteTask: function() { 
    this.parent.collection.remove(this.model); 
    this.model.destroy(); 
} 

में, मॉडल के रूप में स्वचालित रूप से हटा दिया जाता है)। बैकबोन की वेबसाइट से, यह मॉडल के "नष्ट" फ़ंक्शन के लिए प्रासंगिक प्रतिलेख है:

मॉडल पर एक "नष्ट" घटना ट्रिगर करता है, जो इसमें शामिल किसी भी संग्रह के माध्यम से बुलबुला होगा।

क्या मुझे लगता है कि this.parent.collection.remove(this.model); को हटाने से किसी भी तरह से कोड की कार्यक्षमता प्रभावित नहीं होगी? यही मुझे लगता है, लेकिन मैं इसे सुनिश्चित करना चाहता था।

धन्यवाद!

उत्तर

34

यदि आप एक मॉडल को नष्ट करते हैं, तो इसे किसी भी संग्रह से हटा दिया जाता है। आप backbone source

//Internal method called every time a model in the set fires an event. 
_onModelEvent: function(event, model, collection, options) { 
    ... 
    if (event === 'destroy') this.remove(model, options); 

में देख सकते हैं कि तो हाँ, मुझे लगता है कि नहीं होगा आप स्पष्ट रूप से अपने संग्रह से मॉडल को दूर करने की आवश्यकता होगी। खुद के लिए

लेकिन मुझ पर विश्वास नहीं करते हैं, परीक्षण :)

deleteTask: function() { 
    that = this; 
    this.model.destroy({ 
     success: function() { 
     console.log(that.parent.collection); 
     } 
    }); 
} 

चेक अपने आप के लिए सांत्वना है कि क्या मॉडल संग्रह से हटा दिया गया था देखने के लिए।

+0

प्रासंगिक स्रोत कोड को शामिल करने के लिए धन्यवाद - हमेशा मेरी समझ में मदद करता है। – cheshireoctopus

-3

समाधान बैकबोन मॉडल नष्ट करने के कार्य को ओवरराइड करना है। मैंने इसे सफलता और कॉलबैक रणनीति के साथ एक अमूर्त मॉडल पर बनाया:

पैरामीटर "डेटा" मूल पैरामीटर "resp" के अनुरूप है।

destroy: function(successCallback, errorCallback) 
{ 
    var options = { wait: true }; 
    var model = this; 

    successCallback = successCallback || function() {}; 
    errorCallback = errorCallback || function() {};    

    var destroy = function() 
    { 
     model.trigger('destroy', model, model.collection, options); 
    }; 

    options.success = function(data) 
    { 
     if ('SUCCESS' === data.responseCode) 
     { 
      if (options.wait || model.isNew()) 
       destroy(); 

      successCallback(data); 

      if (!model.isNew()) 
       model.trigger('sync', model, data, options); 
     } 
     else 
     { 
      errorCallback(data); 
     } 
    }; 

    if (this.isNew()) 
    { 
     options.success(); 
     return false; 
    } 

    var xhr = this.sync('delete', this, options); 

    if (!options.wait) 
     destroy(); 

    return xhr; 
} 
+0

क्या समाधान? ओपी यह नहीं कह रहा है कि वास्तव में एक समस्या है। इसके बजाय, वे पूछ रहे हैं कि पहले स्थान पर कोई समस्या होगी या नहीं। –

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