Показать сообщение отдельно
  #3 (permalink)  
Старый 19.08.2012, 12:26
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

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)
Ответить с цитированием