gpt4 book ai didi

javascript - 主干集合添加事件未触发

转载 作者:行者123 更新时间:2023-12-01 03:13:43 26 4
gpt4 key购买 nike

我正在编写在线常见的 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();

我的问题是在 createNewBookModel 事件触发并完成后,addOneBook 事件未触发。我的理解(阅读本文 - http://backbonejs.org/#Collection-create )是,创建模型将触发集合上的 add 事件。我尝试使用 bind 而不是 on,但这不起作用。我还尝试用 this.listenTo 代替 on,但这引发了错误,提示 this.listenTo 未定义。请帮忙。谢谢!

最佳答案

我从未广泛使用过 ES6 arrow functions ,但我认为它们可能会给您带来问题。据我了解,箭头函数不绑定(bind) this 对象。当您的函数正在执行时,您的 this 将计算为未定义,甚至可能是 window 父对象,但我认为您希望它计算为主干对象。

尝试替换:

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

与:

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

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

关于javascript - 主干集合添加事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45666106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com