虽然我搜索了一个解决方案,但我找不到一个问题。我使用cordova和jquery mobile。有事件被解雇:document.ready和cordova准备好的设备。我想检查加载状态,检查布尔值,知道何时启动主应用程序。
所以看看我的代码:
首先:加载第一个js-File:
function checkReadyStates() {
if(domReady && cordovaReady) {
timer.stop();
start();
}
}
var domReady = false;
var cordovaReady = true;
var timer = new TimerModel({interval : 50, method : checkReadyStates});
timer.start();
// get notified when DOM is loaded
$(document).ready(function() {
ConsoleController.info('Document ready.');
domReady = true;
});
// get notified when cordova is ready
document.addEventListener('deviceready', function() {
ConsoleController.info('Cordova loaded.');
cordovaReady = true;
}, false);
第二:TimerModel:
define(['backbone'],function(Backbone) {
var model = Backbone.Model.extend({
defaults: {
timerObject : null,
active : false,
interval : 1000,
method : null,
},
// init timer
initialize : function() {
_.bindAll(this, 'start', 'stop'); // context bindings
},
// starts the timer with given interval
start : function() {
if(!this.active) {
this.active = true;
this.timerObject = setInterval(this.method, this.interval);
}
},
// stops timer
stop : function() {
this.active = false;
clearInterval(this.timerObject);
}
});
// return the timer model
return model;
});
希望有人能够提供帮助。谢谢!
答案 0 :(得分:3)
在这行代码
this.timerObject = setInterval(this.method, this.interval);
this.method
和this.interval
都是undefined
,因此您设置的无正在运行 never 。原因是Backbone.Model
没有定义实例本身的构造函数中传递的属性,而是定义了一个名为attributes
的内部属性。您可以使用model.get(property)
方法访问属性:
this.timerObject = setInterval(this.get('method'), this.get('interval'));
此外,将计时器定义为模型并没有多大意义。毫无疑问,你会让它发挥作用,但它不是Backbone.Model
的目的。模型用于表示data
的一部分,而不是功能。我认为一个简单的功能会在这里为你提供更好的服务。
编辑:对于数据,模型不仅仅 ,但它们应包含数据。该模型是定义对该数据进行操作的函数(方法)的好地方。另一方面,TimerModel
是纯逻辑 - 它不代表或封装任何数据或状态。我认为逻辑更好地封装为一个简单的函数“类”:
var Timer = function(options) {
options = options || {};
this.active = false;
this.interval = options.interval || 1000;
this.method = options.method || null;
// starts the timer with given interval
this.start = function() {
if(!this.active) {
this.active = true;
this.timerObject = setInterval(this.method, this.interval);
}
};
// stops timer
this.stop = function() {
this.active = false;
clearInterval(this.timerObject);
};
_.bindAll(this, 'start', 'stop')
});
用法:
var timer = new Timer({interval: 50, method:checkReadyStates});