Это мой первый пост, так что будьте любезны ;) Я пытаюсь создать образец приложения Backbone+requireJS и наткнулся на странную проблему. В моих представлениях функция инициализации, которую я привязываю к событию изменения моделей,
this.model.on("change", this.change());
Событие запускается правильно, когда данные загружаются, и все в порядке. На мой взгляд, я также привязываюсь к событию клика. При щелчке я пытаюсь изменить одно из свойств и надеялся на событие изменения, но оно так и не произошло.
Я пробовал кое-что, рекомендованное здесь, в stackoverflow (здесь, здесь, и там), но безуспешно.
В глубине души я чувствую, что это связано с привязкой событий. Когда я попытался снова привязать модели к событию изменения внутри обратного вызова клика, он начал работать. Итак, теперь я сижу здесь и я, хм, в замешательстве. Может ли кто-нибудь пролить свет на этот вопрос?
Мой вид:
define(
[
'jquery',
'underscore',
'backbone',
'text!templates/news/newsListItem.html'
],
function($, _, Backbone, newsListItemTemplate)
{
var NewsListItemViewModel = Backbone.View.extend({
tagName: 'li',
events: {
"click a" : "onLinkClick"
},
initialize: function(){
this.model.on("change", this.changed());
},
render: function()
{
this.$el.html(_.template(newsListItemTemplate, this.model.toJSON()));
},
changed: function()
{
this.render();
console.log("changed");
},
//GUI functions
onLinkClick: function(e)
{
console.log("click!");
this.model.toggle();
this.model.on("change", this.changed());
}
});
var init = function(config){
return new NewsListItemViewModel(config);
}
return {
init : init
}
}
);
Моя модель:
define(
['jquery', 'underscore', 'backbone'],
function($, _, Backbone){
var NewsListItemModel = Backbone.Model.extend({
toggle: function() {
this.set('done', !this.get('done'));
this.trigger('change', this);
}
});
var init = function(data)
{
return new NewsListItemModel(data);
}
return {
init: init,
getClass: NewsListItemModel
};
}
);
Спасибо за любой вклад :)