2012-05-10 48 views
2

我想在backbone.js事件函數中調用scrollTo方法。我想在單擊列表錨點時滾動到某個div標籤。我將click事件綁定到一個函數並在該函數中調用了scrollTo方法,但是我得到錯誤「Uncaught TypeError:Object function(a,b){return new e.fn.init(a,b,h) }當我點擊錨點時,沒有方法'scrollTo'「。沒有方法scrollTo

請幫忙!

以下是一些示例代碼。

var MenuItemListView = Backbone.View.extend({ 
    el: $('#menuitem_list_container'), 
    initialize: function() { 
     _.bindAll(this, 'render'); 
    }, 
    render: function() { 
     var template = _.template($("#menuitem_list_template").html(), {selectedindex: menuItemList.get('selectedindex'), menuitemlist: menuItemList.get('menuitemlist')}); 
     this.el.html(template); 
     return this; 
    }, 
    events: { 
     "click .nav a":"buttonClick" 
    }, 
    buttonClick: function(e) { 
     e.preventDefault(); 
     target = e.currentTarget.hash; 
     alert(target); 
     $.scrollTo(target, 100); 
    } 
}); 
+4

是否確定您包含滾動到庫? –

+0

http://flesler.blogspot.com/2007/10/jqueryscrollto.html – rjz

回答

2

據我可以告訴你在這裏做什麼是錯誤地使用scrollTo插件。 e.currentTarget.hash將是一個字符串,對於scrollTo插件允許的參數是:

  • 相對選擇$(...).scrollTo('li:eq(14)', 800);
  • jQuery對象$(...).scrollTo($('div li:eq(14)'), 800);
  • DOM元素$(...).scrollTo($('ul').get(2).childNodes[20], 800);
  • 絕對編號$(...).scrollTo(150, 800);
  • 絕對數目(散列) $(...).scrollTo({ top:800, left:700}, 800);
  • 絕對位置$(...).scrollTo('520px', 800);
  • 絕對位置(散)$(...).scrollTo({top:'110px', left:'290px'}, 800);
  • 相對位置$(...).scrollTo('+=100px', 800);
  • 相對位置(散)$(...).scrollTo({top:'-=100px', left:'+=100'}, 800);
  • 百分比

,所以你要結束了做,而不是什麼,是找的位置您嘗試點擊的主播

這些是您的主幹視圖最終將事件綁定到的錨點:

<div class="nav"> 
    <a href="#foo">Foo</a> 
    <a href="#bar">Bar</a> 
</div> 

這些都是你要飛向目標:

<a name="foo">Foo</a> 
<a name="bar">Bar</a> 

所以你必須嘗試和發現所述命名錨這樣的位置:

var hash = e.currentTarget.hash.replace('#', ''); 
var $anchor = $('a[name=' + hash + ']'); 

和那麼你可以使用如下的jQuery對象參數:

$.scrollTo($anchor, 800); 

並且應該解決您的問題