我已经在ES5中使用Backbone很长一段时间了,我希望尝试在ES6中构建一个新项目。我构建了这个非常基本的视图,只是为了测试我的构建过程等。我可以让视图在el中按预期呈现。但是,我似乎根本无法让事件触发。我确信我遗漏了一些简单的东西,但我似乎找不到它是什么。第一个
vbopmzt11#
正如您在构造函数中所看到的,您在调用Backbone.View的代码之后定义了events,该代码执行诸如解析事件散列和绑定事件之类的操作。
events
constructor(options) { super(); // ^---- don't have an event hash when this code executes. this.events = { // this is now useless 'click #bc': 'clickHandler' };
super(options)和在options中传递事件哈希可能会工作。简单而优雅的解决方案:使用Backbone.View.extend()而不是class。使用class和 Backbone.js 网只会带来一些缺点。您仍然可以在项目中使用所有其他ES6特性。
super(options)
options
Backbone.View.extend()
class
eeq64g8w2#
正如TJ所推荐的,这个解决方案运行良好。再次感谢。我们正在考虑是否应该让Backbone在ES6上工作,因为我们目前在ES5上使用它,而不是完全重新工具化到Vue.js上,所以这是我们旅程中很好的第一步。
import $ from "jquery"; import _ from 'underscore'; import Backbone from 'backbone'; class basicView extends Backbone.View { constructor(options) { super(options); this.options = options; this.render(); } render() { $(this.options.el).append('<a id="bc" href="#">button</a>'); return this; } clickHandler() { console.log("click"); return false; } }; new basicView({ el: '#container', events: { 'click a#bc': 'clickHandler' } });
2条答案
按热度按时间vbopmzt11#
正如您在构造函数中所看到的,您在调用Backbone.View的代码之后定义了
events
,该代码执行诸如解析事件散列和绑定事件之类的操作。super(options)
和在options
中传递事件哈希可能会工作。简单而优雅的解决方案:使用Backbone.View.extend()
而不是class
。使用class
和 Backbone.js 网只会带来一些缺点。您仍然可以在项目中使用所有其他ES6特性。eeq64g8w2#
正如TJ所推荐的,这个解决方案运行良好。再次感谢。我们正在考虑是否应该让Backbone在ES6上工作,因为我们目前在ES5上使用它,而不是完全重新工具化到Vue.js上,所以这是我们旅程中很好的第一步。