Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 简单主干事件不触发_Backbone.js - Fatal编程技术网

Backbone.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

我第一次使用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">

讨论题目


首先,必须在重写的方法中调用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)
      },