我有關於setTimeout的各種問題: - 在我的代碼中,我用clearTimeout(content.idTimeout)
清理了特定idTiemout的超時,但是如何清除所有超時? 我有一個模型:有關setTimeout使用backbone.js的各種問題。清理和恢復超時
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);
});
in contentAdded不起作用。
編輯:
http://stackoverflow.com/questions/14258596/way-to-stop-the-running-of-a-javascript-web-application-when-the-focus-is-上OTH
您清晰的JavaScript超時被路過返回超時的整數ID 'setTimeout()'到'clearTimeout()'中。你必須保存'setTimeout()'的返回值才能清除它。在你的代碼中,我看到一個對'setTimeout()'的引用,但它生成並返回的ID不會被保存。 – marekful
現在,在您編輯之後,您可以將timout ID保存到'reply()'函數內的'this.idTimeout'中。這將創建一個名爲idTimout的函數(對象)的屬性。後來當你將'content.idTimeout'傳遞給'clearTimeout'時,'content'不包含'setTimeout'返回的ID,因爲它不是你保存它的''reply'對象。 – marekful
這是關於上下文的......你可以爲'$ .ajax'指定一個'context'參數。這樣'this'關鍵字指向你在AJAX調用的所有回調函數內指定的對象。 – marekful