Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по backbone - не срабатывает событие (https://javascript.ru/forum/misc/52638-vopros-po-backbone-ne-srabatyvaet-sobytie.html)

vuler 28.12.2014 15:37

Вопрос по backbone - не срабатывает событие
 
Только начинаю разбираться с backbone. Может кто подскажет, почему не срабатывает событие?
Test=Backbone.Model.extend({
	constructor: function() {
		this.maewe=100;
	},
	initialize:function(){
		this.on('all',function(){
			console.log('СОБЫТИЕ');
		})
		
	},
	increase:function(){
		this.maewe++;
		}
})

$(document).ready(function() {
	var test=new Test();
	$('#myButton').on('click',function(){
		test.increase();
		console.log(test.maewe);
	});
})

Тут для теста взял переменную maewe.
При нажатии на кнопку #myButton запускаю функцию увеличивающую maewe на единицу. console.log(test.maewe); - пишет все верно 101,102,103 и т.д., но this.on('all',function(){
console.log('СОБЫТИЕ');
}) - не срабатывает, ставил - change:maewe - тот же результат. В чем тут может быть загвоздка?

jsnb 28.12.2014 17:46

Во-первых, зачем тебе нужно переопределять конструктор? Во-вторых, используй геттеры и сеттеры, а не просто пиши свойства.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8"

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone.js"></script>

</head>
<body>
<button id="myButton">asd</button>

<script>
var Test = Backbone.Model.extend({
  defaults: {
    maewe: 100
  },
  initialize: function() {
    this.on('all', function() {
      console.log('СОБЫТИЕ');
    })
  },
  increase: function() {
    this.set({
      maewe: this.get('maewe') + 1
    });
  }
})

$(document).ready(function() {
  var test = new Test();
  $('#myButton').on('click', function() {
    test.increase();
    console.log(test.get('maewe'));
  });
})
</script>

</body>
</html>

Octane 28.12.2014 17:55

Backbone никак не следит за изменением данных модели, ни по таймеру, ни через Object.observe, ни каким другим способом. Спровоцировать событие при изменении данных можно при помощи метода set, как в примере jsnb

vuler 28.12.2014 19:28

Спасибо за ответ. Буду дальше изучать. Вообще вопрос такой - backbone - стоит траты на него времени и усилий или есть фреймворки,которые те же задачи решают проще и умеют еще много чего. Вообще мне нужна библиотека которая позволит создавать классы аналогичные php, чтобы можно было в конструкторе прописать все ДОМ - элементы с которыми буду работать, а из методов класса к ним легко обращаться.

Octane 28.12.2014 21:20

Цитата:

Сообщение от vuler
умеют еще много чего

Backbone не из этой серии, это наоборот минимальный набор.


Часовой пояс GMT +3, время: 11:17.