зваротны выклік/памылка () не выклікаецца пасля таго, як «выбаркі» (на Backbone.Collection)

Я ў цяперашні час мае дзіўную праблему з (ці вакол) Backbone. У мяне ёсць калекцыя Backbone аб'ект, для якога я стаўлю карыстацкі поспех і памылкі зваротных выклікі.

A) ----> Working

    Fubars = Backbone.Collection.extend({ 

      url: "/listfubar",
      model: Fubar,
      fetchS: function() {
        fetch(  { success : sFn, 
                    error : eFn, 
                    statusCode : cFn 
        }); 
      },  
    })

    var fbars = new Fubars(); 
    fbars.fetchS();

B) ----> Breaking

    afterPoll = function() {   
        fbars.fetchS()
    }

This works fine when 'Fubars.fetchS' is being invoked through a regular JavaScript file A). However, I'm having a problem when fetchS (and supplied callbacks) is itself invoked from an 'ajaxPoll' callback B) . 'fetchS' is properly called, the callbacks all exist, and the network call is made through Backbone.sync > JQuery.ajax. But the success, error, or statusCode callbacks are never invoked (again, the network call definitely goes out, and returns successfully).

Хто-небудзь працаваць у гэтым? Я магу толькі думаць, што зваротныя выклікі поспеху і памылак могуць быць неяк знікаюць, калі сыходы «afterPoll». Але «fubars» з'яўляецца глабальным аб'ектам, так што не мае ніякага сэнсу.

Я паглядзеў на аналагічныя пасады ( тут ), але не вырашыць маю праблему , Любыя ідэі вельмі шануецца.

дзякуй

3
У вас ёсць акно кансолі адкрытым, каб убачыць, калі вы атрымліваеце якія-небудзь выключэння?
дададзена аўтар Brian Genisio, крыніца
без выключэнняў; апытанне зваротнага выкліку працаваў, але не пазней «поспех» зваротнага выкліку для здабывання. у канчатковым выніку вырашыць гэтую праблему, перайшоўшы вакол яго> «гэта» спасылка знікла. Калі апытанне зваротнага выкліку выклікае fetchS, яго "поспех" зваротны выклік знікае пасля сеткавага выкліку> Я паспрабаваў "bindAll" гэта выбаркі, fetchS, сінхранізацыя (ББ Fn, што на самой справе выклікае $ .ajax), і г.д., але нічога не атрымлівалася > у канчатковым выніку прамога выкліку $ .ajax пасля апытання і ўстаноўкі ўручную калекцыі Fubars з вынікам> не паспрабаваць прапанову hyperslug ў - цікавы працэс. сапраўды хочаце ведаць, дзе "гэта" страціцца
дададзена аўтар Nutritioustim, крыніца
Цікава, калі выбаркі() трэба спасылку на fbars напрыклад. Што адбываецца, калі вы робіце afterPoll = _.bind (fbars.fetchS, fbars); afterPoll (); ?
дададзена аўтар hyperslug, крыніца
Чаму вы не выкарыстоўваеце арыгінальны метад выбаркі Backbone.collection які праходзіць зваротныя выклікі поспеху і памылак? як гэта: Fubars.fetch ({поспех: SfN, памылка: EFn}); У documentcloud.github.com/backbone/#Collection-fetch кажа, што вы можаце перадаць аргументы Fetch метад ..
дададзена аўтар matiasfh, крыніца
Вы павінны ўдакладніць, калі зваротныя выклікі не выклікаюцца зусім, альбо яны не працуюць. Мая стаўка з'яўляецца тое, што яны выклікаюцца, але яны не працуюць, таму што яны не маюць права "гэта", і вы павінны выкарыстоўваць прывязку або bindAll, каб усталяваць бягучы аб'ект як "гэтага" ў зваротных выкліках, а documentcloud.github.com/underscore/#bindAll
дададзена аўтар dira, крыніца

2 адказы

зрабіць гэта для выбаркі ..

    
    (function fetch(){success:...,error:... }).call();
    or
    (function fetch(){return {success:...,error:...}
     }).call();
    
    

0
дададзена

Я падазраю, што праблема можа быць звязаная з неналежнай <моцны> гэта .

Паспрабуйце замяніць гэтую заяву:

    fetch(  { success : sFn, 
                error : eFn, 
                statusCode : cFn 
    }); 

з гэтым сцвярджэннем:

    this.fetch(  { success : sFn, 
                error : eFn, 
                statusCode : cFn 
    });
0
дададзена