Skip to main content

this.function is not a function error, but function exists



I have some code to get calendar events and display them. The display is only updated if the events have changed, since the last call.







var calendar = {



events = null,



display_calendar_events : function (data) {

// Some display stuff...

},



get_events: function() {



// Get messages for calendar

$.getJSON("/ajax/get-events/", function(json){



var new_events = json.data;

// If events haven't changed, do nothing

if (this.events === new_events) {

return true;

}



// Events have changed.

// Save new events

this.events = new_events;



// Display new events

this.display_calendar_events(json);

});

},

}







I call this with:







calendar.get_queued_events();







The problem is, I'm getting the error "this.display_calendar_events is not a function" (last line of code). But if I change this line to:







calendar.display_canendar_events(josn)







it works. The storing of the old events with "this.events" works fine in both cases.





Can someone explain this to me? How can "this" work for some stuff and not others? Thanks.


Comments

  1. In a jQuery AJAX callback, this references the ajax request object. Try using var self = this; before your AJAX call, and in the callback use self.display_calendar_events().

    Alternatively, you could just reference calendar.display_calendar_events() directly. But that's not easily refactored like the self method is.

    ReplyDelete
  2. When you call this.display_calendar_events() inside the ajax request you area ctually in a different context than your object. You have to do:

    var calendar = {

    events = null,

    display_calendar_events : function (data) {
    // Some display stuff...
    },

    get_events: function() {
    var $this = this;
    // Get messages for calendar
    $.getJSON("/ajax/get-events/", function(json){

    var new_events = json.data;
    // If events haven't changed, do nothing
    if ($this.events === new_events) {
    return true;
    }

    // Events have changed.
    // Save new events
    $this.events = new_events;

    // Display new events
    $this.display_calendar_events(json);
    });

    },

    }

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

CCNA 3 Final Exam => latest version

1 . Which security protocol or measure would provide the greatest protection for a wireless LAN? WPA2 cloaking SSIDs shared WEP key MAC address filtering   2 . Refer to the exhibit. All trunk links are operational and all VLANs are allowed on all trunk links. An ARP request is sent by computer 5. Which device or devices will receive this message? only computer 4 computer 3 and RTR-A computer 4 and RTR-A computer 1, computer 2, computer 4, and RTR-A computer 1, computer 2, computer 3, computer 4, and RTR-A all of the computers and the router   3 . Refer to the exhibit. Hosts A and B, connected to hub HB1, attempt to transmit a frame at the same time but a collision occurs. Which hosts will receive the collision jamming signal? only hosts A and B only hosts A, B, and C only hosts A, B, C, and D only hosts A, B, C, and E   4 . Refer to the exhibit. Router RA receives a packet with a source address of 192.168.1.65 and a destination address of 192.168.1.161...