在定义后,Backbone不能立即使用this.el

时间:2016-01-29 15:39:12

标签: javascript variables backbone.js

我有一个关于在声明声明后立即使用变量的问题。

我一直试图做这样的事情:

var BuzzQuizView = Backbone.View.extend({
    el: $('.buzz-quiz'),
    liveMarked: this.el.data('live-marked'),
    questionTotal: this.el.data('question-count'),
    quizId: this.el.data('quiz-id'),
    ...

或者,如果我们从Backbone那里解决问题,我总是尝试这样的事情:

var $answer = $('.answer'),
    $question = $answer.parent().parent();

但我总是得到一个错误,因为Backbone示例是:

Cannot read property 'data' of undefined

并且在变量的情况下我得到错误:

$answer is not defined

这是为什么?我只是想不通,为什么我不能使用变量?正如我所看到的那样,变量已被声明,代码已执行,因此变量应该可用。

非常感谢任何帮助。

----编辑----

所以我认为上面使用var的普通JS示例确实可以正常工作。

我想要问的是为什么在任何类型的对象中都存在同样的问题,请以下面的例子为例:

var obj = {
    $body: $('body'),
    allDivs: $body.find('allDivs'),
    ...
}

为什么$ body目前无法使用?

1 个答案:

答案 0 :(得分:2)

this.el应指定为jQuery选择器字符串 DOM元素。不是 jQuery对象,就像在代码中一样($('.buzz-quiz'))。

当您将选项传递给this.el构造函数时,Backbone.View也未定义。它仅在Backbone.View实例化后才可用。

所以你必须在Backbone.View构造函数中初始化那些属性:

var BuzzQuizView = Backbone.View.extend({
    el: '.buzz-quiz',
    initialize: function() {
        this.liveMarked = this.$el.data('live-marked');
        this.questionTotal = this.$el.data('question-count');
        this.quizId = this.$el.data('quiz-id');
    }
    ...
});