Backbone.js 下划线J:u.after和u.each;控制异步流
我正在寻找u.after函数,只是为了玩玩它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;
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
更新#2after
函数的全部目的是保留回调触发逻辑,只需在每个循环中调用该函数。.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.函数不太流行后,让我生活在黑暗中。再次感谢。。。