Backbone 集合添加事件未触发
Backbone collection add event not firing
我正在编写 Backbone Todos 应用程序的略微修改版本,该应用程序通常在网上找到,而不是使用书籍。我的 Backbone 版本是 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
事件触发并完成后没有触发。我的理解(阅读此 - http://backbonejs.org/#Collection-create)是创建模型将触发集合上的 add
事件。我尝试使用 bind
而不是 on
,但这没有用。我还尝试用 this.listenTo
代替 on
,但是这引发了一个错误,说 this.listenTo
未定义。请帮忙。谢谢!
我从未广泛使用 ES6 arrow functions,但我认为它们可能会给您带来问题。据我了解,箭头函数不绑定 this
对象。当您的函数正在执行时,您的 this
将评估为 undefined 甚至 window
父对象,但我认为您希望它评估为 backbone 对象。
尝试替换:
initialize: () => {
// ...
},
与:
initialize: function() {
// ...
},
与您的其他方法类似。我认为这会解决很多问题。
我正在编写 Backbone Todos 应用程序的略微修改版本,该应用程序通常在网上找到,而不是使用书籍。我的 Backbone 版本是 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
事件触发并完成后没有触发。我的理解(阅读此 - http://backbonejs.org/#Collection-create)是创建模型将触发集合上的 add
事件。我尝试使用 bind
而不是 on
,但这没有用。我还尝试用 this.listenTo
代替 on
,但是这引发了一个错误,说 this.listenTo
未定义。请帮忙。谢谢!
我从未广泛使用 ES6 arrow functions,但我认为它们可能会给您带来问题。据我了解,箭头函数不绑定 this
对象。当您的函数正在执行时,您的 this
将评估为 undefined 甚至 window
父对象,但我认为您希望它评估为 backbone 对象。
尝试替换:
initialize: () => {
// ...
},
与:
initialize: function() {
// ...
},
与您的其他方法类似。我认为这会解决很多问题。