jquery/jquery 移动插件 - 小部件 - 调用私有方法不起作用

Posted

技术标签:

【中文标题】jquery/jquery 移动插件 - 小部件 - 调用私有方法不起作用【英文标题】:jquery/jquery mobile plugin - widget - calling private method doesn't work 【发布时间】:2011-11-17 06:25:51 【问题描述】:

我正在尝试从我的插件中调用私有方法 _scrollMe,但我不断收到错误消息,指出它不是函数。

谁能告诉我我做错了什么?谢谢!

(函数($,窗口,未定义) $.widget("mobile.multiview", $.mobile.widget, _创建:函数() this._morph(); , _morph:函数() $('div[data-role="page"]').live('pagebeforeshow.scroll', function(event) var $page = $(this); if ( $page.data('scrollable', 'Off') ) $page._scrollMe(); // 这不会触发 ); , _scrollMe:函数() 警报(“滚动我”); ); // 初始化 $( 文档 ).bind( "pagecreate", function( ) $(document).multiview(); ); )(jQuery,窗口);

【问题讨论】:

【参考方案1】:

您正在尝试使用错误的语法访问私有方法 - 使用 $page.method 正在尝试将其作为公共方法调用。

将其更改为 this._scrollMe 应该可以工作。

【讨论】:

不起作用。可能是因为我在 window (="this") 上调用插件,然后我正在监听 pageBeforeShow 并重新使用 "this"?【参考方案2】:

我不认为“this”是您期望在该事件回调中的样子。

尝试将 $page 变量移到函数之外。

var $page = $(this);
$('div[data-role="page"]').live('pagebeforeshow.scroll', function(event)

也许是这样:

var $page = this;

// 编辑 //

_morph: function() 
    var page = this;
    $('div[data-role="page"]').live('pagebeforeshow.scroll', function(event) 
        if($page.data('scrollable', 'Off') ) 
            $page._scrollMe(); // this doesn't fire 
        
     );
,

【讨论】:

你的意思是把它放在 //initialize 之后还是完全放在插件之外? 尝试将 "var $page = this" 放在 live() 函数之外,但仍然在 _morph 函数中。 也不这样做... :-( 我仍然认为这是因为插件使用 this="window" 并实时监听 this=page。你怎么看? 老实说我没有使用过 $.widget() 所以我不确定它到底是做什么的。但是由于事件函数是一个闭包,所以放在它外面的任何变量都应该可以被里面的代码访问。

以上是关于jquery/jquery 移动插件 - 小部件 - 调用私有方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 小部件。如何取当前的可修改元素?

解决了jQuery插件未能导入到项目之中

Kendo 小部件和引导输入组插件

表单验证小总结

透明小部件不随其父级移动

jQuery---jQuery插件