我承认自己知道一点点javascript,jquery或oop,但我知道足够多的东西可以把它们拼凑起来,有时让它们起作用。然而,这是我的头脑,尽管我谷歌,我无法做出正在发生的事情的正面或反面。这是我的代码的要点:
jQuery(document).ready(function($) {
var methods = {
init : function( options ) {
if (somthing) {
this.latlng(input);// <--- ERROR: Object has no method
}
},
auto : function( ) {
if (something) {
this.latlng(input);
} else {
this.location(input);
}
},
location : function ( input ) {
// draw map
},
latlng : function ( input, l ) {
// draw map
}
}
$.fn.codeAddress = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
};
var geo = new $(document).codeAddress(); // Initialize the object
});
我依靠jQuery Docs Plugin/Authoring作为我的模板,并从那里开始零碎。理想情况下,当文档准备就绪时,它会自己加载init(),但不会这样,我会添加倒数第二行来初始化对象。
最初使用方法latlng()在init()中创建一个映射来绘制它。这就是我在第6行得到错误的地方,this.latlng(输入)Uncaught TypeError:Object [object Object]没有方法'latlng'。此后,onclick事件处理程序调用auto()根据它接收的输入重绘地图。
如果我的解释和/或代码是junkshow,我道歉。我正在努力学习。
答案 0 :(得分:0)
你需要这样说:
methods['latlng'].apply(this);
原因是因为this
的值不是您的插件。您应该将this
的值实际记录到控制台以获得更多洞察力,但实际上,您已在插件中声明了一个名为methods的对象。 latlng位于该对象的上下文中。为了调用它,你可以通过它的键(latlng)引用它并调用.apply()方法。
答案 1 :(得分:0)
return methods.init.apply( methods, arguments );
答案 2 :(得分:0)
在jQuery插件的代码中,this
是对包含当时迭代的DOM元素的jQuery对象的引用。
在您的情况下,您已将插件手动附加到document
(您应该在您的网站代码中执行此操作,而不是在插件文件中)
在任何情况下,您都可以使用this.latlng()
引用您的插件,而不是致电this.codeAddress( 'latlng' );
。
这是jQuery插件的预期功能,如果你以这种方式访问它,它会保持干净。