1

我使用 Dojo,并且一些页面小部件是在代码之外的 HTML 模板中定义的。我如何对 JSDoc 说某些this字段是真正定义的?

SomePage.js

define([ "dojo/dom", "dojo/on", "dojo/_base/lang" ],
   function(dom, on, lang) {

      return {        
            init: function(){    
                on(this._myButton, "click", lang.hitch(this, this._foo));
            },

            foo: function(){
                //some code here
            }
      }            
   }
});

SomePage.html

<div>
    <div class="Button" data-dojo-attach-point="_myButton">
        Click me!
    </div>
</div>

在此示例中,JSDoc 警告我this._myButton未解决。它在可见范围内确实是未定义的,但实际上它保证由 Dojo 通过data-dojo-attach-point. 我如何覆盖 JSDoc 并说他this._myButton是为当前模块定义的?(使用Webstorm IDE)

4

1 回答 1

1

我有同样的问题,目前它不是自动“解决”的,而是通过风格/纪律。我面前没有代码,但在工作中我们正在制作这样的小部件:

define([
        "dojo/declare", 
        "dojo/dom",
        "dojo/on",
        "dojo/_base/lang",
        "dijit/_WidgetBase",
        "dijit/_TemplatedMixin",
        "dijit/_WidgetsInTemplateMixin",
        "dojo/text!./templates/myTemplate.html"
        "dijit/form/Button" // Instantiated in template
], function(declare, dom, on, lang, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template) {         
        return declare([_WidgetBase, _TemplatedMixin, WidgetsInTemplateMixin],{        
            templateString:template,    


            // Attachpoints
            _myButtonWidget:null,
            _someThingyNode:null,

            init: function(){    
                on(this._myButtonWidget, "click", lang.hitch(this, this._foo));
            },
            foo: function(){
                //some code here
            }
        });            
});

有一个myTemplate.html喜欢:

<div>
    <div data-dojo-type="dijit/form/Button" data-dojo-attach-point="_myButton">
        Click me!
    </div>
    <div data-dojo-attach-point="someThingyNode"><!-- Not a widget--></div>
</div>

主要的收获应该是您无需等待 Dojo 在运行时创建该属性即可创建该属性。作为个人惯例,附加的 dijit 以“Widget”结尾,任何“vanilla”附加点都被命名为“Node”。

好处:

  1. 它使您的 IDE 快乐,因此它不会弹出不必要的警告
  2. 它使您的 IDE 能够提供代码完成功能
  3. 它通知正在读取.js文件的任何人附加点存在
  4. 尤其是在有很多附加点的情况下,您不必一直参考.html模板来确定您是在处理子小部件还是普通 DOM 节点。
于 2013-09-10T03:25:26.643 回答