我是新的backbone.js和试图了解如何路线,视图等工作,现在我有一个问题,事件建立了相同的视图。这里是一个剪辑,将显示你正是我的意思. http://screencast.com/t/QIGNpeT2OUWu
这是我的 Backbone.js 路由器的样子
var Router = Backbone.Router.extend({
routes: {
"pages": "pages",
}
pages: function () {
var page_view = new PageView();
}
});
因此,当我单击“页面”链接时,我创建了一个新的页面视图,这就是我使用的代码
PageView = Backbone.View.extend({
el: $("#content"),
initialize: function () {
$.ajax({
url: '/pages',
success: function (data) {
$("#content").html(data);
}
});
},
events: {
"click td input[type=checkbox]": "updatePublishedStatus"
},
updatePublishedStatus: function (event) {
console.log('update publish status');
}
});
我想这是非常基本的,但正如您在剪辑中所看到的,每次我导航到/页时,都会在复选框中注册另一个事件。
2条答案
按热度按时间vmpqdwk31#
这里有些地方出了问题。
1.你的视频显示页面是一个集合,
Pages
。Pages
是一个Backbone.Model
,带有诸如页面名称、slug、已发布等属性......你缺少这些,这将是有害的。你不应该只是加载一些html并将其推到你的DOM中,这违背了使用Backbone的初衷。1.如果你为一个页面创建了一个模型,它将有一个视图。然后你的/pages路由将显示集合页面等的视图。
1.你将不会在视图的初始化中获取数据,而是通过
pages.fetch();
来获取数据,其中pages是Pages
集合的一个示例,这甚至可以在你初始化路由器之前发生。1.通过视图更改属性时,将更新各个模型。
顺便说一句:在initialize时获取数据不是很好。你可以在实际获取数据之前调用render(),这一点都不好玩。另外,你可以使用视图的$el来代替
$('#content')
。就像this.$el.html(...);
中那样kcrjzv8t2#
将
var page_view = new PageView()
移至Router.pages()
之外。让
PageView.initialize()
成功回调将data
保存到一个变量中。可以保存到PageView
中,也可以保存到模型中。将
render
函数添加到设置$("#content").html(data);
的PageView
。在
Router.pages()
内调用page_view.render()
。