向一个jQuery/DOM元素添加一个函数
Adding a function to one jQuery/DOM element
我正在编写一个实例化地图的插件。然后,地图将提供移动到地球上另一个地方的功能。
脚本使地图变得很好。然而,我不能将函数"钉"在元素上,让另一个插件在回调中使用。
以下是我尝试过的方法;在插件中:
(function($){
$.fn.mapDo(options){
map = new BlahMap(this.get(0));
this.moveTheMap = function(place){
map.moveItToThat(place);
}; // nope.
}
})(jQuery);
然后,在视图中:
$(map).mapDo();
$(otherElement).otherControl({
callback: function(place){
$(map).moveTheMap(place); // moveTheMap is not there on $(map)!
}
};
问题
如果可能的话,我该如何向map jQuery或DOM元素添加函数?如果没有,我该如何提供这种功能?
更重要的是,我这样把事情分开是不是走对了路?我是一个Javascript的新手,这些任务通常是如何在保持组件分离的情况下完成的?
虽然这是我尝试的,但更普遍地说,我在维护可链接性的同时,很难从jQuery插件中输出内容。在这种情况下,我要做的是从插件输出一个回调,该回调将在稍后的执行中处理被调用的元素。
插件通常只向jQuery原型添加一个方法,并且对插件实例的方法调用是用字符串完成的。
(function($) {
$.fn.mapDo = function(options) {
var args = [].slice.call(arguments, 1); //Get all the arguments starting from 2nd argument as an array
return this.each(function() {
var $this = $(this),
instance = $this.data("map-instance");
if (!instance) {
$this.data("map-instance", (instance = new BlahMap(this, options)));
}
if (typeof options == "string") {
instance[options].apply(instance, args);
}
});
};
})(jQuery);
$(elem).mapDo( "moveTheMap", place ); //This would also instantiate the plugin if it wasn't instantiated
下面是jsfiddle展示的动作:
http://jsfiddle.net/X8YA8/1/
您可以使用.data
方法存储map
。
(function($){
$.fn.mapDo = funciont(options) {
this.data('map', new BlahMap(this.get(0)));
return this;
};
$.fn.moveTheMap = function(place) {
var map = this.data('map');
if (map) {
map.moveItToThat(place);
}
return this;
};
})(jQuery);
相关文章:
- 我可以在json对象中添加一个函数吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 单击更改图标并通过javascript添加一个css类
- fluxxor向一个flux实例添加一组以上的操作
- 当在Ember中点击一个项目时,我如何将一个活动类添加到项目列表中
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 将添加一个相同类型的事件附加或覆盖以前添加的具有相同名称的事件
- angularjs移除焦点上的活动类并添加到下一个项目
- 使用jquery contains获取一个元素并添加类
- 有没有添加一个ng点击到md背景
- 如何为下拉列表的每个选项添加一个属性
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 单击删除其中一个添加的行
- 几个jQuery日期选择器小部件,只向其中一个添加类
- 我想创建一个添加新表单的按钮
- Babel v6:我如何/可以编写一个添加新语法(即新运算符)的插件
- GWT SimplePager -为每个下一个和上一个添加历史记录
- 自动提交表单上的最大长度,-为现有的一个添加java脚本代码
- 如何在jquery中移除一个添加了类的类
- 动态更改URL,而不需要将前一个添加到历史堆栈