我有一些代码来获取日历事件并显示它们。只有在上次呼叫后事件发生变化时才会更新显示。
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);
});
},
}
我称之为:
calendar.get_queued_events();
问题是,我收到错误“this.display_calendar_events不是函数”(最后一行代码)。 但是,如果我将此行更改为:
calendar.display_canendar_events(josn)
它有效。使用“this.events”存储旧事件在两种情况下都能正常工作。
有人可以向我解释一下吗? “这个”如何为某些东西而不是其他东西工作?感谢。
答案 0 :(得分:8)
在jQuery AJAX回调中,this
引用了ajax请求对象。在AJAX调用之前尝试使用var self = this;
,在回调中使用self.display_calendar_events()
。
或者,您可以直接引用calendar.display_calendar_events()
。但这并不像self
方法那样容易重构。
答案 1 :(得分:1)
当您在ajax请求中调用this.display_calendar_events()时,您实际上处于与对象不同的上下文中。你必须这样做:
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);
});
},
}