如何用JSDoc正确标注Backbone视图中的事件?
Backbone视图事件的JSDoc注释规范
我正在编写基于Backbone框架的JavaScript代码文档,需要为视图中声明的事件添加JSDoc注释,现有示例代码如下:
define([], function(Backbone){ let myView = Backbone.View.extend({ model: myModel, initialize: function() { /** * @event <<- 此处应如何填写? */ this.model.on('change:foo', function() { //do something }); }, events: { 'click .btn-next': 'onClickNext', 'click #finish': 'onClickFinish' }, /** * @event <<- 此处应如何填写? */ onClickNext: function() { //do something }, /** * @event <<- 此处应如何填写? */ onClickFinish: function() { //do something } }); });
参考JSDoc文档给出的写法示例:
/** * Description.. * @event MyView#click * @listens MyView#click */ onClickNext(){}
针对实际场景中的疑问,整理解决方案如下:
疑问1:如何指定被点击元素的类或ID?
可以在事件名称中补充元素选择器信息,结合@listens明确监听的目标事件,示例写法:
/** * 处理下一步按钮点击事件 * @event MyView#click:.btn-next * @listens MyView#click:.btn-next */ onClickNext: function() { //do something }
也可以在描述文本中明确触发元素,同时在事件标识里带上选择器,兼顾直观性和规范要求。
疑问2:对于模型中的事件,应使用@event myModel#change还是@event myView#change?
事件触发源是模型myModel,因此应该使用@event myModel#change:foo,同时用@listens标注视图监听的是模型事件,示例:
initialize: function() { /** * 监听模型foo属性变更事件 * @event myModel#change:foo * @listens myModel#change:foo */ this.model.on('change:foo', function() { //do something }); }
疑问3:如何指定被修改的属性?
直接在事件名称后追加:属性名即可,比如模型的change:foo事件,用@event myModel#change:foo标注,就能明确是模型的foo属性发生了变更。
内容的提问来源于stack exchange,提问作者Fill Freeman
相关产品推荐
相关产品推荐

