Backbone jQuery加载顺序的问题

时间:2014-04-02 23:34:44

标签: javascript jquery backbone.js

在我的一个视图中,我将收集一个集合(user_id,日期,帖子数,平均帖子长度),然后对数据执行一些数学计算(例如:汇总总数和平均帖子长度。

要做到这一点,我循环使用下划线每个函数并创建一个附加到表的新视图(元素是tr)。

在循环结束时,我调用jquery排序表插件来对表中的数据进行排序。我遇到的问题是,在调用jQuery排序表之前,很多时候每个循环都没有完成运行。我已经设置好了,因此在调用jquery之前会有一段延迟,但是在这种情况下,100%的时间内更优雅的解决方案是什么。

var size = _.size(userposts);
_.each(userposts, function(post) {

  var sum = 0;
  var totposts = 0;
  j++;
  _.each(post, function(times) {
    sum += (times.get("posts") * times.get("avgpost"));
    totposts += times.get("posts");
  });

  if(post[0].get("userId")){
    var tempuser = new User({id: post[0].get("userId")});
    tempuser.fetch({ success: function() {
      $("#user-posts").append(new UserPostView({data: {name: tempuser.get("name"), num: totposts, avg: parseInt((sum / totposts))}}).render().el);
    }});
  }
  if (j == size) {
    formatTable();
  }
});

1 个答案:

答案 0 :(得分:0)

所以,也许我错过了你的问题,但要全力以赴,你有:

循环(或循环集合)

需要在循环结束时触发的事件?

计时器是一个大不禁!如果此过程在其他计算机上花费的时间更长还是移动设备?您永远不想依赖计时器来排队依赖于现有数据的函数调用,尤其是在没有备份的情况下。

我有两种方法可以想到这样做

var loopStatus = 0;

for (var i = 0; i < n; i++){
someMethod();

loopStatus++

if (loopStatus = n){
 someMethod2();

}

}

或者你可以在循环之外的someMethod2()调用中使用一段时间