【问题标题】:Return data from a JQuery plugin with namespace从带有命名空间的 JQuery 插件返回数据
【发布时间】:2014-09-06 22:23:01
【问题描述】:

我想创建一个使用命名空间的 JQuery 插件。这就是我尝试创建一个返回 html 的简单函数:

(function($) {
    $.fn.ns = function () {
        return {
            foo1: function(){
               var element = $(this);
               $(element).html('<b>hello</b>');
               return this;
            }
       }
    };
})(jQuery);

因此命名空间应该被称为ns。

它应该填充这个简单的 div:

<div class="sayHello"></div>

这样称呼,好像不行:

$(".sayHello").ns().foo1();

我在这里做错了什么?

JSFiddle:http://jsfiddle.net/CVrFU/475/

【问题讨论】:

  • 有很多 jQuery 插件的教程和样板。建议阅读它们

标签: jquery


【解决方案1】:

这样就必须有一个closure 里面有元素。

(function($) {
    $.fn.ns = function () {
        var self = this,
            element = $(this);

        return {
            foo1: function(){
               $(element).html('<b>hello</b>');
               return self;
            }
       }
    };
})(jQuery);

在后面的运行中保存this的更薄,有几种方法:

(function($) {
    var foo1 = function(){
       $(this).html('<b>hello</b>');
       return this;
    } 


    $.fn.ns = function () {
        var self = this;

        return {
            foo1: function () {
               return foo1.apply(self, arguments);
            }
       }
    };
})(jQuery);

这样,您不必总是重新创建函数,而只能在需要的上下文中运行它。

http://jsfiddle.net/q303xwob/

但是如果你想保存 jQuery 链接,你应该在 fn 对象中传递你所有的方法(在这个例子中是 ns 和 foo1)。

【讨论】:

  • 谢谢,但是示例两个不会“污染”全局命名空间吗?
  • 有一个带有就绪回调函数的上层闭包 - (function($) {}) 和所有使用 var 声明的变量,所以它都保存在这个回调的本地范围内。也许您也应该阅读 js 中的 scope 是如何工作的。这会很有帮助,mozilla 有很好的文档和示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 2021-03-21
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2012-02-21
相关资源
最近更新 更多