2013-02-17 8 views
10

मैं इस तरह अपने रीढ़ की हड्डी के मॉडल की परिवर्तन घटना पर बंधन करता हूं।बैकबोन model.fetch() पूर्ण होने पर कैसे पता चलेगा?

this.model.on("change", this.render, this); 

कभी-कभी मैं मॉडल का नवीनतम संस्करण प्राप्त करना चाहता हूं और जबरन दृश्य प्रस्तुत करना चाहता हूं। तो मैं इस

this.model.fetch(); 

दुर्भाग्य model.fetch (करते हैं) केवल परिवर्तन ईवेंट सक्रिय करता है, तो नए डेटा क्या पहले से मॉडल में जमा हो गया था से अलग है।

मैं हमेशा यह कैसे ट्रिगर कर सकता हूं। जब पूरा हो जाता है तो कॉलबैक कॉलबैक, चाहे वह एक परिवर्तन घटना को ट्रिगर करता है या नहीं? आपकी मदद के लिए (अग्रिम में)

धन्यवाद

उत्तर

11

आप $.ajax सफलता कॉलबैक का उपयोग कर सकते हैं, लेकिन आप मॉडल पर बैकबोन sync और error ईवेंट भी सुन सकते हैं। सर्वर पर एक सफल कॉल के बाद आग, सर्वर पर असफल कॉल के बाद error आग लगती है।

this.model.on('sync', this.render, this); 
this.model.on('error', this.handleError, this); 
1

fetch विधि वैकल्पिक रूप से स्वीकार कर सकते हैं सफलता और त्रुटि कॉलबैक है; सबसे आसान समाधान आपको सफलता कॉलबैक में render देखने के लिए है। आप शायद लौटे हुए jqXHR वादे का भी उपयोग कर सकते हैं, लेकिन अगर ऐसा कोई मामला है जहां AJAX सफल होगा (प्रति jQuery) लेकिन मॉडल प्रारंभिक विफल रहता है, तो यह उपयोग समस्याग्रस्त हो सकता है।

1

मैं क्या अपने कोड संरचना, है, लेकिन अपने अपने दृष्टिकोण को अंदर अपने मॉडल फ़ेच कर रहे हैं, तो आप कुछ इस

var that = this; 
this.model.fetch().done(function() { 
    that.render(); 
}); 
बाकी

की तरह उपयोग कर सकते हैं अपने अपने मॉडल फ़ेच कर रहे हैं, तो पता नहीं है आपके विचार के बाहर, आप अपने देखने के लिए अपने वादे गुजरती हैं और इनिशियलाइज़

में उदाहरण के लिए समान

var promise = model.fetch(); 
// other code here 
var view = new View({ 
    model: model, 
    promise: promise 
}); 

और आपके विचार के अंदर कुछ कर सकते हैं,

View = Backbone.View.extend({ 
    initialize: function(){ 
     this.options.promise.done(function() { 
      // your code here 
     }); 
    } 
}); 
1

कैसे इस समाधान के बारे में: सार को

// emit fetch:error, fetch:success, fetch:complete, and fetch:start events 
fetch: function(options) { 
    var _this = this; 

    options = options || {}; 

    var error = options.error; 
    var success = options.success; 
    var complete = options.complete; 

    options.error = function(xhr, textStatus, errorThrown) { 
    _this.trigger('fetch:error'); 
    if (error) error(xhr, textStatus, errorThrown); 
    }; 

    options.success = function(resp) { 
    _this.trigger('fetch:success'); 
    if (success) success.call(options.context, resp); 
    }; 

    options.complete = function() { 
    _this.trigger('fetch:complete'); 
    if (complete) complete(); 
    }; 

    _this.trigger('fetch:start'); 

    return Backbone.Model.prototype.fetch.call(this, options); 
} 

लिंक https://gist.github.com/fedyk/23761ce1236c5673fb84

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