我假设:
- 您指的是模式弹出框,而不是弹出窗口。如果您尝试更改弹出窗口的内容,您只需加载一个显示您期望的数据的新 URL。
- 您的 Rails 模板已经创建了所有 HTML 标记
- 你正在使用 jQuery
JSFiddle 示例:http: //jsfiddle.net/4J6fL/
第一步是创建一个负责数据列表功能的Backbone.View实例。
var DataView = Backbone.View.extend({
events: {
// this event will be bound to every button inside our parent element
"click button": "enlarge"
},
enlarge: function(e) {
// backbone rebinds 'this' to refer to the View. It will not refer to the element
// triggering the event as it would in jQuery. Grab a reference to the triggering element.
$el = $(e.currentTarget);
// gather the data for our popup window
var popupData = {
title: $el.siblings('p').text(),
img: $el.siblings('img').attr('src')
};
this.popup(popupData);
},
popup: function(data) {
// find the view's popup box element - this.$el refers to the views bound DOM element
var $enlarged = this.$el.find('#enlarged');
// create new elements based on the data
var $title = $('<h2 />', { text: data.title });
var $img = $('<img />', { src: data.img });
// empty the popup box of current data
$enlarged.html('');
// fill the popup box with our new data
$enlarged.append($title);
$enlarged.append($img);
}
});
此时,我们有一个可以绑定到任何 DOM 元素的视图,并赋予它上述功能。
- 该
events
属性负责将事件回调绑定到视图。
- 请注意
this
回调中的上下文,Backbone 将其绑定到视图,而不是事件。
this.$el
指的是绑定到我们视图的 DOM 元素。你会看到如何做进一步。
- 实际的弹出逻辑是标准的 jQuery DOM 操作。
现在我们有了视图,我们需要初始化并使用它。这是在充当控制器的 Backbone.Router 中完成的:
dataView = new DataView({ el: $('#data-view') });
请注意我们如何传递el
将绑定到该视图的元素 ()?这就是将 DOM 元素绑定到我们的视图的原因,允许我们在视图中对其进行操作。
下一个合乎逻辑的步骤是将弹出代码分离到另一个视图中,使用事件来指示何时应该更新。这将使您可以轻松地从页面的其他区域触发弹出窗口。