Так вот пример моего приложения в jsfiddle: http://jsfiddle.net/GWXpn/1/Магистральные Не розжига События
Проблема заключается нажмите событие не увольняют вообще. Я не получаю никаких ошибок JS в консоли.
Во-первых, я хотел отобразить неупорядоченный список с парой, если элементы, каждый элемент должен быть доступен для клика. Это то, что я сделал:
var FooModel = Backbone.Model.extend({});
var ListView = Backbone.View.extend({
tagName: 'ul', // name of (orphan) root tag in this.el
initialize: function() {
_.bindAll(this, 'render'); // every function that uses 'this' as the current object should be in here
},
render: function() {
for (var i = 0; i < 5; i++) {
var view = new SingleView({
model: new FooModel()
});
$(this.el).append(view.render().el);
}
return this; // for chainable calls, like .render().el
}
});
var SingleView = Backbone.View.extend({
tagName: 'li', // name of (orphan) root tag in this.el
initialize: function() {
_.bindAll(this, 'render', 'click'); // every function that uses 'this' as the current object should be in here
},
events: {
"click": "click"
},
click: function(ev) {
console.log("aaa");
alert(333);
},
render: function() {
$(this.el).append("aaa");
return this; // for chainable calls, like .render().el
}
});
Я хотел бы разделить свое приложение в нескольких модулей (заголовок, тело, колонтитулы), поэтому я создал абстрактную модель и расширить свои модули из него:
var AbstractModule = Backbone.Model.extend({
getContent: function() {
return "TODO";
},
render: function() {
return $('<div></div>').append(this.getContent());
}
});
var HeaderModule = AbstractModule.extend({
id: "header-module",
});
var BodyModule = AbstractModule.extend({
id: "body-module",
getContent: function() {
var listView = new ListView();
return $("<div/>").append($(listView.render().el).clone()).html();
}
});
var ModuleCollection = Backbone.Collection.extend({
model: AbstractModule,
});
Затем я просто создал свой основной вид и отобразил все его просмотры:
var AppView = Backbone.View.extend({
el: $('#hello'),
initialize: function (modules) {
this.moduleCollection = new ModuleCollection();
for (var i = 0; i < modules.length; i++) {
this.moduleCollection.add(new modules[i]);
}
},
render: function() {
var self = this;
_(this.moduleCollection.models).each(function (module) { // in case collection is not empty
$(self.el).append(module.render());
}, this);
}
});
var appView = new AppView([HeaderModule, BodyModule]);
appView.render();
Любые идеи почему?
Щелчок вызывает предупреждение для меня. Кроме того, ваша скрипка имеет javascript в панели css. – Prisoner
@ Prisoner Извините, что я опубликовал неправильную ссылку jsfiddle. Я исправил его сейчас ... –
Кажется, это проблема, связанная с используемой версией Backbone (0.3.3 серьезно?). Я очень сомневаюсь, что кто-то сможет вам помочь. – Loamhoof