Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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
Javascript 主干集合添加事件未触发_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript 主干集合添加事件未触发

Javascript 主干集合添加事件未触发,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我正在编写一个略加修改的主干Todos应用程序版本,该应用程序通常在网上找到,使用的是书籍。我的主干版本是1.3.3。像这个例子一样,现在我只是尝试在输入列表中显示用户添加的图书标题。我的代码(部分)如下所示: app.BookList = Backbone.Collection.extend({ model: app.Book, // For temp use, to be replaced with URL localStorage: new Backbone.LocalStor

我正在编写一个略加修改的主干Todos应用程序版本,该应用程序通常在网上找到,使用的是书籍。我的主干版本是1.3.3。像这个例子一样,现在我只是尝试在输入列表中显示用户添加的图书标题。我的代码(部分)如下所示:

app.BookList = Backbone.Collection.extend({
  model: app.Book,
  // For temp use, to be replaced with URL
  localStorage: new Backbone.LocalStorage('BookList')
});

app.bookList = new app.BookList();


app.AppView = Backbone.View.extend({
  el: '#app',

  initialize: () => {
    this.input = this.$('#book-name');
    app.bookList.on('change', this.addOneBook, this);
    app.bookList.fetch();
  },

  events: {
    'keypress #book-name': 'createNewBookModel'
  },

  addOneBook: (book) => {
    console.log('BOOK: ', book);
    const b = new app.BookView({ model: book });
    this.$('#bookList').append(b.render().el());
  },

  createNewBookModel: (e) => {
    if (e.which === 13) {
        e.preventDefault();
        app.bookList.create({ title: this.input.val().trim() });
      this.input.val('');
    }
  }

});


app.appView = new app.AppView();

我的问题是
addOneBook
事件在
createNewBookModel
事件触发并完成后没有触发。我的理解(阅读本文-)是,创建模型将触发集合上的
add
事件。我尝试使用
bind
而不是
打开
,但没有成功。我还尝试了
this.listenTo
来代替上的
,但出现了一个错误,即,
this.listenTo
未定义。请帮忙。谢谢

我从未广泛使用过ES6,但我认为它们可能会给您带来问题。据我所知,箭头函数不绑定
这个
对象。在执行函数时,您的
this
将计算为未定义的,甚至可能是
窗口的父对象,但我认为您希望它计算为主干对象

尝试替换:

initialize: () => {
  // ...
},
与:

initialize: function() {
  // ...
},

其他方法也类似。我认为这将解决很多问题。

我从未广泛使用过ES6,但我认为它们可能会给您带来问题。据我所知,箭头函数不绑定
这个
对象。在执行函数时,您的
this
将计算为未定义的,甚至可能是
窗口的父对象,但我认为您希望它计算为主干对象

尝试替换:

initialize: () => {
  // ...
},
与:

initialize: function() {
  // ...
},

其他方法也类似。我想这会解决很多问题。

可能重复的可能重复的可能重复的谢谢,那确实是问题所在!谢谢,这确实是问题所在!