Backbone.js 下划线J:u.after和u.each;控制异步流

Backbone.js 下划线J:u.after和u.each;控制异步流,backbone.js,underscore.js,Backbone.js,Underscore.js,我正在寻找u.after函数,只是为了玩玩它 var renderPoin = _.after(data.models.length, function() { console.log( 'siap' ); require(["ftscroller"], function () { $('.dedo').css('width', $li_width); var containerElement, scroller;

我正在寻找u.after函数,只是为了玩玩它

var renderPoin = _.after(data.models.length, function() {
 console.log( 'siap' );
 require(["ftscroller"], function () {
   $('.dedo').css('width', $li_width);
    var containerElement, scroller;                                     
    containerElement = document.getElementById('poin-nav');                                             
    scroller = new FTScroller(containerElement, {
       scrollbars: false,
       scrollingY: false,
       snapping: true,
       scrollResponseBoundary: 8,
       scrollBoundary: 0
       //contentWidth: $li_width
    });
  });
});


_.each(data.models, function (poin, i) {
  db.transaction(function(trans) {
        trans.executeSql("insert into piezo_point(id, nama, lat, lng) values(?,?,?,?)", [poin.get('id'), poin.get('nama'), poin.get('lat'), poin.get('lng')]);                                      
  }, self.errorCB, function() {
      self.viewList = new Poin({
            model: poin,
            vent: window.vent
  });
  self.$el.find('#poin-nav ul').append(self.viewList.render().el);
  $li_width += parseInt(self.viewList.$el.css('width'));
  if ( (i+1) === data.models.length){                                                       
    renderPoin;
  }
 });    
}, self);
但是,上面的renderPoin没有按预期执行。我做错了什么


提前谢谢

我想这只是一个打字错误。
您没有调用
renderPoin
函数,因为您缺少这部分代码中的
()
括号:

if ( (i+1) === data.models.length){                                                       
    renderPoin;
}
更新
我甚至不会争辩说您的代码甚至没有调用所需的函数。
看看:

(uu.之后)。。。创建一个版本的函数,该函数仅在第一次调用计数次数后运行

如果您也不相信这些文档,请尝试在浏览器控制台中运行以下简单测试:

var f = _.after(1, function(){});
alert(typeof f); // and be amazed
更新#2
after
函数的全部目的是保留回调触发逻辑,只需在每个循环中调用该函数。
.after
函数决定何时实际调用该函数或不调用该函数,因此如果((i+1)==data.models.length){并将其替换为函数调用,则可能会丢失

_.each(data.models, function (poin, i) {
    db.transaction(function(trans) {
        trans.executeSql("insert into piezo_point(id, nama, lat, lng) values(?,?,?,?)", [poin.get('id'), poin.get('nama'), poin.get('lat'), poin.get('lng')]);                                      
    }, self.errorCB, function() {
        self.viewList = new Poin({
            model: poin,
            vent: window.vent
        });
        self.$el.find('#poin-nav ul').append(self.viewList.render().el);
        $li_width += parseInt(self.viewList.$el.css('width'));     
        // just call it!                                            
        renderPoin();
    });    
}, self);

不,这不是打字错误,
renderPoin
这是一个变量。我从下划线的官方网站复制了这个。我只是想帮助你,而不是争论。查看更新。如果你仍然不同意,我将删除我的答案。好的,不争论。我尝试了
renderPoin()
但它仍然没有触发。还需要检查类型..没有呼叫,但
未定义
你就是那个人。非常感谢。\uu.函数不太流行后,让我生活在黑暗中。再次感谢。。。