关于使用backbone.js的setTimeout的各种问题。清理并恢复超时

时间:2013-01-10 11:52:26

标签: javascript jquery backbone.js

我有关于setTimeout的各种问题: - 在我的代码中,我使用clearTimeout(content.idTimeout)清除特定idTiemout的超时,但所有超时有多清楚? 我有下一个型号:

var ContentModel = Backbone.Model.extend({
URL: "http://localhost/example.php",    
requestType: "POST",
dataType: "json",
data: "", //Set the value outside the model
idTimeout: "",  
initialize: function() {
_.bindAll(this);
},   
startSend: function (Data) { },
reply: function (Data) { 
    var dataJson = eval(Data);              
    console.log(dataJson);
    this.idTimeout = setTimeout(this.ajaxRequest(),4000);
},
problems: function (Data) {   },
ajaxRequest: function () {
    $.ajax({
        async:true,
        type: this.requestType,  dataType: this.dataType, 
        url: this.URL,  data: this.data,
        beforeSend:this.startSend,  success: this.reply,
        timeout:4000,  error:this.problems 
    });
}

在视图(片段)中清除超时:

initialize: function() {
    _.bindAll(this); 
    this.model = new ContentCollection();
    this.model.on("add", this.contentAdded);
        this.model.on("remove", this.removeContent);    
},
contentAdded: function(content) { //run it when add a model
    if (content.view == null) {
    var template_name = 'cam';                                                      
    content.view = new ContentView({model: content,template: $.trim($("[template='"+ template_name +"'] div").html() || "Template not found!")});
    $("div.camBox").empty();                
    content.ajaxRequest();                              
    this.$el.find(".content").find("div.camBox").append(content.view.render().el);                                              
    }                   
},  
removeContent: function(content) {
    if (content.view != null) { 
        content.view.remove();              
    }
    clearTimeout(content.idTimeout);
    content.clear();  //Clear the properties of the model   
}

- 焦点在其他窗口时如何清除超时并在返回时恢复? 也许用焦点方法。下一个代码

$('html').focus(function() {
    clearTimeout(content.idTimeout);
});
在contentAdded中

不起作用。

编辑:

http://stackoverflow.com/questions/14258596/way-to-stop-the-running-of-a-javascript-web-application-when-the-focus-is-on-oth

1 个答案:

答案 0 :(得分:3)

一种解决方案可能是:

为(多个)超时ID指定一个数组。

window.timeouts = [];

每次调用setTimeout:

timeouts.push(setTimeout(...));

然后,如果你想停止所有超时:

for(var i in timeouts) {
  clearTimeout(timeouts[i]);
}