gpt4 book ai didi

javascript - OOP jQuery 插件 elem 在一个地方未定义,而在其他地方未定义

转载 作者:行者123 更新时间:2023-11-29 19:51:31 28 4
gpt4 key购买 nike

如果我在这里明确定义它,我的元素怎么会未定义。它适用于所有其他方法,但 setUpCalendar() 除外。我已经包含了代码在到达有问题的部分之前经过的“路径”。

var Calendar = {

init: function(options, elem) {

this.options = $.extend( {}, this.options, options );
this.elem = $(elem); //Clearly defined here and works elsewhere
this.getFeed();

return this;
},

getFeed: function() {
var self = Calendar;
$.jGFeed(this.options.feedUrl, function (feeds) {

if (!feeds) {
return false;
}

$.extend(self.entries, feeds.entries);

self.parseEntries();
}, 10);
},

parseEntries: function() {
//Rename to fit plugin requirements
for (var i = 0; i < Calendar.entries.length; i++) {
var entry = Calendar.entries[i];
entry["allDay"] = false;

//Rename
entry["url"] = entry["link"];
delete entry["link"];
};

this.setUpCalendar();
},

setUpCalendar: function() {
Calendar.elem.fullCalendar({ //It's telling me Calendar.elem is undefined here
editable: false,
weekends: false,
events: Calendar.entries //funny story, here the reference works
});
}
};

更新:

$.fn.ksdCalendar = function( options ) {
if (this.length) {
return this.each(function() {
var myCalendar = Object.create(Calendar);
myCalendar.init(options, this);
$.data(this, 'ksdCalendar', myCalendar);
});
}
};

$("#calendar").ksdCalendar({
feedUrl: "http://www.kent.k12.wa.us/site/RSS.aspx?DomainID=275&ModuleInstanceID=4937&PageID=4334"
});

最佳答案

所以这里的问题是你在混合你的 this引用资料和 Calendar引用。当您调用 this.getFeed()您正在对新创建的 Calendar 进行操作目的。内 getFeed不过,您设置的是 var self = Calendar然后使用 selfentries 设置值并调用parseEntries .

您在这里所做的是创建一个对全局 self 的引用(使用 Calendar)对象文字。该对象不是您通过 Object.create 初始化的对象(而且它不是您在 init 上调用的那个)。

这一切归结为,您已经初始化了 myCalendar并设置 elem它附加到,但在您随后的方法调用中,您设置了 entries在全局Calendar对象文字。在你的里面 parseEntries方法,所有这些都变得显而易见,因为当前范围在全局范围内 Calendar对象文字而不是 Calendar 的实例Object.create 创建和返回的对象.

要修复它,执行 var self = this;而不是 var self = Calendar; .内 parseEntries引用 this.entries而不是 Calendar.entries ,并在 setUpCalendar引用 this.entriesthis.elem而不是 Calendar.entriesCalendar.elem分别。

关于javascript - OOP jQuery 插件 elem 在一个地方未定义,而在其他地方未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17622112/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com