2011-09-14 75 views
1

我想從我的插件中調用私有方法_scrollMe,但我不斷收到一個錯誤,它不是一個函數。jquery/jquery移動插件 - 部件 - 調用私人方法不起作用

有人可以告訴我我做錯了什麼嗎?謝謝!

 
    (function($, window, undefined){ 
     $.widget("mobile.multiview", $.mobile.widget, {   
     _create: function() { 
      this._morph(); 
      }, 
     _morph: function() { 
      $('div[data-role="page"]').live('pagebeforeshow.scroll', function(event){ 
       var $page = $(this); 
       if ($page.data('scrollable', 'Off')) { 
        $page._scrollMe(); // this doesn't fire 
        } 
      }); 
      }, 
     _scrollMe: function() { 
      alert ("scrollMe"); 
      } 
    }); 

// initialize 
$(document).bind("pagecreate", function() { 
     $(document).multiview(); 
     }); 

})(jQuery,window); 

回答

0

你試圖訪問使用了錯誤的語法私有方法 - 使用$page.method試圖調用它作爲一個公共方法。

將其更改爲this._scrollMe應該有效。

+0

不起作用。是否因爲我在窗口調用插件(=「this」),然後我正在監聽pageBeforeShow並重新使用「this」? – frequent

0

我不認爲'這'是你期望它在那個事件回調。

嘗試移動函數外部的$ 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 
     } 
    }); 
}, 
+0

你的意思是把它放在//初始化之後還是外部? – frequent

+0

嘗試在live()函數外部放置「var $ page = this」,但仍在_morph之內。 – brain

+0

也不會這樣做...... :-(我仍然認爲這是因爲插件使用這個=「窗口」,並且直接監聽這個頁面,你覺得呢? – frequent