我第一次尝试使用backbone.js,但是不能正确地触发事件。有人能解释一下我做错了什么吗?
非常感谢!
在我的html底部加载的app.js中:
var Discussion = Backbone.Model.extend({
defaults: {
id: null,
title: 'New discussion'
},
urlRoot: '/api/discussion'
});
var DiscussionCollection = Backbone.Collection.extend({
model: Discussion,
url: '/api/discussion'
});
var DiscussionView = Backbone.View.extend({
events: {
'click .btnCreateDiscussion': 'create',
'keypress #discussion_title': 'create'
},
initialize: function(){
//this.$el = $("#form_discussion");
this.template = _.template( $('#discussion-template').html() );
},
render: function(){
console.log("rendering");
return this;
},
create: function(){
console.log('creating a new discussion')
}
});
var discussionView = new DiscussionView({ el: $("#form_discussion"), model: Discussion });html:
<form action="" id="form_discussion" method="post">
<label for="discussion_title">Discussion Title</label>
<input type="text" id="discussion_title" name="discussion_title" />
<input class="btnCreateDiscussion" type="button" value="Create Discussion">
<script type="text/template" id="discussion-template">
<h1><%= title %></h1>
</script>发布于 2013-06-11 22:47:14
问题出在jQuery上。最新的1.x版本不起作用,但使用最新的2.x版本可以解决这个问题。如果有人能解释为什么在这种情况下我们应该只使用2.x,这将是有用的?
发布于 2013-06-11 20:41:19
它似乎工作得很好:http://jsfiddle.net/Jbahx/。(检查您的主干和下划线版本,并确保DOM已初始化)
你到底做错了什么:
实例化视图时使用
model: Discussion。你必须给视图一个模型的实例,而不是一个类。如果你给视图一个模型(可选的),通常是因为你想表示一个特定实例的数据。this.template = _.template( $('#discussion-template').html() );方法从来没有被调用过,但是它目前是没有用的,所以在initialize方法中它不是那么大的一个模型。在扩展时将其作为视图的一个属性,这样它就会被放入视图的原型中(即使它在这里看起来是一个单例):template: _.template( $('#discussion-template').html() ),.发布于 2013-06-11 19:02:34
首先,您必须在覆盖的方法中调用Backbone.View.prototype.initialize,让Backbone初始化事件侦听器:
initialize: function(){
//this.$el = $("#form_discussion");
this.template = _.template( $('#discussion-template').html() );
Backbone.View.prototype.initialize.call(this)
},第二,在初始化中渲染视图--这不是最佳实践。用于此单独的render方法。
https://stackoverflow.com/questions/17041129
复制相似问题