Answers:
视图el是所有事件绑定发生的地方。您不必使用它,但是如果您希望骨干触发事件,则需要在el上进行渲染工作。视图el是DOM元素,但不一定是预先存在的元素。如果您不从当前页面中拉出一个页面,则会创建该页面,但是如果您想看到它做任何事情,则必须将其插入页面。
一个例子:我有一个创建单个项目的视图
window.ItemView = Backbone.View.extend({
tagName: "li", //this defaults to div if you don't declare it.
template: _.template("<p><%= someModelKey %></p>"),
events: {
//this event will be attached to the model elements in
//the el of every view inserted by AppView below
"click": "someFunctionThatDoesSomething"
},
initialize: function () {
_.bindAll(this, "render");
this.render();
},
render: function () {
this.el.innerHTML = this.template(this.model.toJSON());
return this;
}
});
window.AppView = Backbone.View.extend({
el: $("#someElementID"), //Here we actually grab a pre-existing element
initialize: function () {
_.bindAll(this, "render");
this.render(new myModel());
},
render: function (item) {
var view = new ItemView({ model: item });
this.el.append(view.render().el);
}
});
第一个视图仅创建列表项,第二个视图实际上将它们放置在页面上。我认为这非常相似,与ribs.js网站上的ToDo示例中发生的情况类似。我认为惯例是使您满意。因此,el可作为登陆位置或放置模板内容的容器。然后,骨干将其事件绑定到其中的模型数据。
当你创建一个视图中可以使用操纵EL在四个方面el:
,tagName:
,className:
,和id:
。如果没有一个被声明,则el默认为不带id或class的div。此时它也未与页面关联。您可以使用tagName将标签更改为其他名称(例如tagName: "li"
,将为您提供el <li></li>
)。您可以同样设置el的id和class。Still el还不是您网页的一部分。el属性使您可以对el对象进行非常精细的操作。大多数时候,我使用el: $("someElementInThePage")
实际上将您对视图所做的所有操作绑定到当前页面。否则,如果您希望查看在视图中所做的所有艰苦工作,这些内容会显示在页面上,则需要将其插入/追加到视图中其他位置的页面(可能是在渲染中)。我喜欢将el视为所有视图操纵的容器。
现在有点老了,但是我也很困惑,所以对于其他来到这里的人来说,这个小提琴可能会有所帮助-http://jsfiddle.net/hRndn/2/
var MyView = Backbone.View.extend({
events: {
"click .btn" : "sayHello",
},
sayHello : function() {
alert("Hello");
},
render : function() {
this.$el.html("<input type='button' class='btn' value='Say Hello'></input>");
}
});
$(function() {
myView = new MyView({el:"#parent_id"});
myView.render();
});
您希望您的“ el”引用一个包含子元素的元素,该子元素具有触发视图更改的任何事件。可以和“ body”标签一样宽。
el
东西的人。