bot87, спасибо за ответ.
То есть, код корректен и всё должно работать?
Тем не менее у меня сейчас в консоль валится вот такая ошибка: Uncaught TypeError: Cannot read property 'state' of undefined.
Может быть в мою выдержку из кода не попало что-то существенное. Только учусь, ещё могу даже не понимать, где может быть ошибка.
Вот код объекта полностью:
var Paradise = Backbone.View.extend({
el: $("#paradise"),
model: appState,
state: "inactive",
animateDuration: 400,
animateDelay: 400,
initialize: function(){
this.model.bind('change:frame', this.onFrameChange, this)
},
onFrameChange: function(){
var cFrame = this.model.get("frame")
switch (true) {
case (cFrame>15 && cFrame<25):
var ff = (25-cFrame)/20*Math.PI
$(this.el).css({opacity:Math.cos(ff)}).show()
break
case(cFrame>48 && cFrame<56):
var ff = (cFrame-48)/16*Math.PI
$(this.el).css({opacity:Math.cos(ff)}).show()
break
case(cFrame>=25 && cFrame<=48):
$(this.el).css({opacity:1}).show()
if(cFrame>=30 && this.state=="inactive"){
this.state="boom"
this.paradiseBoom()
}else if(cFrame<30 && this.state=="boom"){
this.paradiseLost()
this.state="inactive"
}
break
default:
$(this.el).hide()
this.paradiseLost()
this.state="inactive"
}
},
paradiseBoom: function(){
var $happiness = $(this.el).children("li")
var animateDuration = this.animateDuration
var animateDelay = this.animateDelay
function AddActiveMarker(index,obj){
var $cHappiness = $happiness.eq(index)
if($cHappiness.size()==1){
$("#eden").show()
switch(index){
case 0:
$("#tree")
.css({opacity:0,display:"block"})
.animate({opacity:1},{duration:animateDuration})
break
case 1:
$("#mrpostman")
.css({opacity:0,display:"block"})
.animate({opacity:1},{duration:animateDuration})
break
case 2:
$("#bench")
.css({opacity:0,display:"block"})
.animate({opacity:1},{duration:animateDuration})
break
}
$("<span class=activemarker />")
.css({opacity:0})
.appendTo($cHappiness).animate({opacity:1},{duration:animateDuration,complete:function(){
if(obj.state=="boom") setTimeout(function(){AddActiveMarker(index+1,obj)},animateDelay)
}})
}
}
AddActiveMarker(0,this)
},
paradiseLost: function(){
$(this.el).children("li").children("span.activemarker").remove()
$("#eden").animate({opacity:0},{duration:400,complete:function(){
$(this).hide().css({opacity:1})
$("#eden>*").hide()
}})
}
})
var paradise = new Paradise()
В консоли ошибка указывает на эту строку: if(obj.state=="boom") setTimeout(function(){AddActiveMarker(index+1,obj) },animateDelay)