javascript - backbone 不能在定义后立即使用 this.el

标签 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 示例,它是:

无法读取未定义的属性“数据”

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

$answer 未定义

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

如有任何帮助,我们将不胜感激。

----编辑----

所以我发现上面使用 var 的普通 JS 示例确实可以完美运行。

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

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

为什么此时 $body 不可用?

最佳答案

this.el应指定为 jQuery 选择器 stringDOM 元素。不是 jQuery 对象,如您的代码 ($('.buzz-quiz'))。

此外,当您将选项传递给 Backbone.View 构造函数时,this.el 也是未定义的。它仅在 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');
    }
    ...
});

关于javascript - backbone 不能在定义后立即使用 this.el,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088321/

相关文章:

backbone.js 使用不同的 url 来保存和获取模型

javascript - 如何只获取一个元素

javascript - 如何绕轴旋转 Three.js Vector3?

javascript - 在 JavaScript 中将宽度更改为全宽

javascript - NodeJS 严格模式

c++ - C++中的抽象类声明

javascript - Backbone.js View 无法正确取消绑定(bind)事件

不提供模板参数的 C++ 类指针

c++ - 初始化 C++ 后更改变量类型

javascript - Dropzone.js 状态为挂起且未上传文件