【问题标题】:jquery/jquery mobile plugin - widget - calling private method doesn't workjquery/jquery 移动插件 - 小部件 - 调用私有方法不起作用
【发布时间】: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,窗口);

【问题讨论】:

    标签: jquery jquery-plugins methods jquery-mobile widget


    【解决方案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() 所以我不确定它到底是做什么的。但是由于事件函数是一个闭包,所以放在它外面的任何变量都应该可以被里面的代码访问。
    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多