1

我正在重写我的 setInterval 任务,这样当我使用 Underscore.js debounce 跳转到我网站上的不同选项卡时,我不再需要 clearInterval。

我不断收到错误_.debounce is not a function

这是我下面的原始工作代码。基本上,当标签为“PANO”时,我运行此功能,每50ms更改相机角度。当我重新单击“全景”选项卡时,clearInterval 会重置计时器。

clearInterval(timerID);
if (target == 'pano') {
   initialize();
   timerID = setInterval(function(){
     if (!hovering && !moved) {
       panoOptions.pov.heading += .5;      
       panoOptions.pov.heading = wrapAngle(panoOptions.pov.heading);
       panorama.setOptions(panoOptions);
     }
   },50);

  initialize();

} 

当我尝试重构我的代码以使用._debounce(http://underscorejs.org/#debounce) 时,我得到一个错误,如果我的方法是正确的,我不会。

timerID = _.debounce(function(){
  if (!hovering && !moved) {
    panoOptions.pov.heading += .5;      
    panoOptions.pov.heading = wrapAngle(panoOptions.pov.heading);
    panorama.setOptions(panoOptions);
  }
},50);

$("#pano_toggle").click(
  function(){
    console.log("CLICKED");
    timerID();
  }
);

我基本上设置了一个单击侦听器,以便当用户单击按钮时,去抖动功能开始运行。我还添加console.log("CLICKED")了查看我的点击侦听器是否正常工作,但它没有收到点击。

关于我的逻辑在哪里失败的任何提示?

编辑:

我确保需要 Underscore.js:

require(["require", 
         "jquery", 
         "underscore",
         "lib/jquery/jquery.galleria",
         "gmaps!",
         "//assets.pinterest.com/js/pinit.js",
         "twitter_bootstrap/bootstrap-dropdown"], function(require, _){
4

1 回答 1

3

您的要求语法不正确。模块按照它们在第一个数组中列出的顺序作为参数传递给您的函数。所以它应该看起来像这样:

require([
     "require", 
     "jquery", 
     "underscore",
     "lib/jquery/jquery.galleria",
     "gmaps!",
     "//assets.pinterest.com/js/pinit.js",
     "twitter_bootstrap/bootstrap-dropdown"
], function(require, $, _, galleria, ...){
     /* .... */
});

虽然,你不应该需要require本身。

于 2012-10-23T20:55:56.800 回答