我正在主干中执行我的第一个应用程序,并且尝试附加事件时发生了一件奇怪的事情。
到目前为止我得到了这个代码:
//View for @girl, EDIT action
GirlEditView = Backbone.View.extend({
initialize: function(el, attr) {
this.variables = attr;
console.log(attr);
this.render();
},
render: function() {
var template = _.template( $("#girl_edit").html(), this.variables );
$(this.el).html( template );
$("#edit_girl").modal('show');
}
});
//View for @girl
GirlView = Backbone.View.extend({
initialize: function(el, attr) {
this.variables = attr;
this.render();
},
render: function() {
var template = _.template( $("#girl_template").html(), this.variables );
$(this.el).html( $(this.el).html() + template );
},
events: {
"click p.modify": "modify"
},
modify: function() {
//calls to modify view
new GirlEditView({el : $("#edit_girl")}, this.variables);
}
});
//One girl from the list
Girl = Backbone.Model.extend({
initialize: function() {
this.view = new GirlView({el : $("#content")}, this.attributes );
}
});
//all the girls
Girls = Backbone.Collection.extend({
model: Girl,
});
//do magic!
$(document).ready(function() {
//Underscore template modification
_.templateSettings = {
escape : /\{\[([\s\S]+?)\]\}/g,
evaluate : /\{\[([\s\S]+?)\]\}/g,
interpolate : /\{\{([\s\S]+?)\}\}/g
}
//get initial data and fill the index
var list = [];
$.getJSON('girls.json', function(data) {
list = [];
$.each(data, function(key, val) {
list.push( new Girl(val) );
});
var myGirls = new Girls(list);
console.log( myGirls.models);
});
});
如你看到的。
我正在使用一个集合来存储所有女孩,数据来自 ruby 中的 REST api。
每个女孩创建一个新的模型实例,并在里面附加了一个视图实例。
我不知道这是否是一个好习惯,但我想不出更好的方法来做到这一点。
每个视图都会创建一个具有唯一 ID 的内容。girl-1 girl-2 继续。
现在,模板有一个编辑按钮。我最初的想法是攻击onclick事件并触发编辑视图进行渲染。
这是按预期工作的。
到目前为止的问题是:
当事件触发时,所有集合(女孩)都会触发编辑视图,而不是“拥有”渲染视图的集合。
我的问题是我做错了什么?
非常感谢