我有一个关于在声明声明后立即使用变量的问题。
我一直试图做这样的事情:
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目前无法使用?
答案 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');
}
...
});