Backbone.js 简单主干事件不触发
我第一次使用backbone.js,但无法正常启动事件。有人能解释一下我做错了什么吗 非常感谢 在“我的html”底部加载的app.js中:Backbone.js 简单主干事件不触发,backbone.js,Backbone.js,我第一次使用backbone.js,但无法正常启动事件。有人能解释一下我做错了什么吗 非常感谢 在“我的html”底部加载的app.js中: var Discussion = Backbone.Model.extend({ defaults: { id: null, title: 'New discussion' }, urlRoot: '/api/discussion' }); var DiscussionCollection = Ba
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">
讨论题目
首先,必须在重写的方法中调用Backbone.View.prototype.initialize,以便让Backbone初始化事件侦听器:
initialize: function(){
//this.$el = $("#form_discussion");
this.template = _.template( $('#discussion-template').html() );
Backbone.View.prototype.initialize.call(this)
},
第二,在初始化中渲染视图-这不是最佳实践。用于此单独的渲染方法。它似乎工作正常:。(检查主干和下划线版本,并确保DOM已初始化)
关于你做错了什么:
模型:实例化视图时的讨论
。您必须为视图提供模型的实例,而不是类。如果给视图一个模型(可选),通常是因为要表示特定实例的数据
- 您的render方法从未被调用,但目前它是无用的,所以这不是什么大问题
this.template=..template($('.#讨论模板').html()在初始化方法中的code>。扩展时将其作为视图的一个属性,以便将其放入视图的原型中(即使它在这里似乎是一个单例):template:\ux0.template($(“\u35;讨论模板”).html(),
问题出在jQuery上。最新的1.x版本不起作用,但使用最新的2.x版本修复了这个问题。如果有人能解释为什么我们在这种情况下只使用2.x,那将是非常有用的
感谢大家的帮助。无需调用
主干网.View.prototype.initialize.call(this)
,如果在视图上设置了此方法,主干网将调用此方法。如果您查看主干的源,您将看到此方法是空的。从文档中也可以看出,如果视图定义了初始化函数,则在首次创建视图时将调用该函数。是否有什么不起作用的地方,我刚刚设置了它,似乎工作正常。视图初始化是否保存在$(document).ready()
?您创建的JSFIDLE似乎工作正常,但在当地,它并没有启动我的活动。我会进一步调查并报告。问题是我不得不使用jQuery2.x而不是最新的1.x,不知道为什么。当使用1.xjQuery时,它没有抛出任何错误。使用2.x版本而不是最近的1.x版本修复了这个问题。花了我很多时间;)
initialize: function(){
//this.$el = $("#form_discussion");
this.template = _.template( $('#discussion-template').html() );
Backbone.View.prototype.initialize.call(this)
},