зворотній виклик (і) успіху/помилки не викликається після 'fetch' (на Backbone.Collection)

Зараз у мене є дивна проблема з (або навколо) магістральної. У мене є об'єкт магістральної колекції, для якого я ставлю користувальницькі виклики успіху та помилок.

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» виходить. Але «фубари» - глобальний об'єкт, так що це не має ніякого сенсу.

Я подивився на подібні публікації ( тут ), але не вирішив проблему . Будь-які ідеї дуже вдячні.

Дякую

3
Чи відкрито вікно консолі, щоб побачити, чи отримуєте ви винятки?
додано Автор Brian Genisio, джерело
немає винятків; зворотний виклик опитування працював, але не пізній «виклик успіху» для fetch. закінчився вирішенням цієї проблеми, обійшовши її> 'це' посилання зникло. Коли виклик виклику викликає fetchS, його зворотній виклик '' success '' зникає після того, як виклик мережі> я спробую 'bindAll', щоб отримати, fetchS, sync (Bb fn, який фактично викликає $ .ajax), і т.д. > закінчивши прямий виклик $ .ajax після опитування, і вручну налаштування колекції Fubars з результатом> не спробував пропозицію hyperslug - цікавий випробування. дійсно хочу знати, де "це" втрачається
додано Автор Nutritioustim, джерело
Цікаво, що fetch() потребує посилання на примірник fbars . Що відбувається, коли ви робите afterPoll = _.bind (fbars.fetchS, fbars); afterPoll (); ?
додано Автор hyperslug, джерело
Чому ви не використовуєте оригінальний метод вибірки Backbone.collection, передаючи зворотний виклик успіху та помилки? так: Fubars.fetch ({success: sFn, помилка: eFn}); У documentcloud.github.com/backbone/#Collection-fetch говориться, що ви можете передавати аргументи методу вибірки ..
додано Автор matiasfh, джерело
Ви повинні уточнити, чи не викликаються зворотні виклики взагалі, або вони не працюють. Моя ставка на те, що вони викликаються, але вони не працюють, тому що вони не мають права "this", і ви повинні використовувати bind або bindAll для встановлення поточного об'єкта як "це" у зворотних викликах, а також documentcloud.github.com/underscore/#bindAll
додано Автор dira, джерело

2 Відповіді

зробіть це для fetch ..

    
    (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
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram