首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不触发简单的主干事件

不触发简单的主干事件
EN

Stack Overflow用户
提问于 2013-06-11 17:46:09
回答 3查看 80关注 0票数 0

我第一次尝试使用backbone.js,但是不能正确地触发事件。有人能解释一下我做错了什么吗?

非常感谢!

在我的html底部加载的app.js中:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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">

代码语言:javascript
复制
  <script type="text/template" id="discussion-template">
    <h1><%= title %></h1>
  </script>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-11 22:47:14

问题出在jQuery上。最新的1.x版本不起作用,但使用最新的2.x版本可以解决这个问题。如果有人能解释为什么在这种情况下我们应该只使用2.x,这将是有用的?

票数 1
EN

Stack Overflow用户

发布于 2013-06-11 20:41:19

它似乎工作得很好:http://jsfiddle.net/Jbahx/。(检查您的主干和下划线版本,并确保DOM已初始化)

你到底做错了什么:

实例化视图时使用

  • model: Discussion。你必须给视图一个模型的实例,而不是一个类。如果你给视图一个模型(可选的),通常是因为你想表示一个特定实例的数据。
  • 你的problem.
  • this.template = _.template( $('#discussion-template').html() );方法从来没有被调用过,但是它目前是没有用的,所以在initialize方法中它不是那么大的一个模型。在扩展时将其作为视图的一个属性,这样它就会被放入视图的原型中(即使它在这里看起来是一个单例):template: _.template( $('#discussion-template').html() ),.
票数 1
EN

Stack Overflow用户

发布于 2013-06-11 19:02:34

首先,您必须在覆盖的方法中调用Backbone.View.prototype.initialize,让Backbone初始化事件侦听器:

代码语言:javascript
复制
initialize: function(){
    //this.$el = $("#form_discussion");
    this.template = _.template( $('#discussion-template').html() );
    Backbone.View.prototype.initialize.call(this)
},

第二,在初始化中渲染视图--这不是最佳实践。用于此单独的render方法。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17041129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档