JavaScript对象变量在运行时未定义,但可以访问

时间:2014-05-21 10:58:31

标签: javascript backbone.js

我尝试访问一个确实存在但不在运行时的对象变量时遇到了一些奇怪的JavaScript行为。

以下显示了我尝试访问的对象的启动:

app.examView = new app.ExamView({el: $("#main_wrap"), model: model});

以下是我试图访问app.examView变量的对象创建的定义和调用。

app.ExamView = Backbone.View.extend({
    initialize: function(){  
        this.render();  
        this.calculatorView = new app.ExamCalculatorView({el: $("#exam_calculator_container"), model: this.model});   
        this.questionView = new app.ExamQuestionView({el: $("#exam_question"), model: this.model});

在此处记录examView变量将返回undefined:

var app = app || {};

app.ExamQuestionView = Backbone.View.extend({
    initialize: function(){
        console.log(app.examView);

虽然可以通过控制台访问该对象: Firebug console

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我假设您的Backbone View在DOM准备好之前调用它render()。您的代码是否包含在$(document).ready()

"奇怪的行为"是因为元素在完成DOM后变得可用。

答案 1 :(得分:0)

原来负责的代码是:

app.ExamAnswerView = Backbone.View.extend({
    initialize: function() { 
        ...
    }, 

在初始化完成后,app.examView将无法访问。

使用超时等待函数执行完毕,解决了问题。

setTimeout(function() {
    app.examView.calculatorView.refresh();
}, 100); 

使用延迟不是首选,但它现在可以访问变量。

使用promises似乎很方便!