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 移动插件 - 小部件 - 调用私有方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章