Javascript 数据dojo附加点值未在相关自定义小部件类中解析

Javascript 数据dojo附加点值未在相关自定义小部件类中解析,javascript,dojo,Javascript,Dojo,我已经为我的自定义小部件定义了以下模板(这只是一个示例,它还不一定“有效”) 模板“车辆控制” 问题是,当我在WebStorm(JetBrains编辑器)中时,它显示this.carSelect无法解决问题。我不知道我在这段代码中缺少了什么,也不知道为什么当我包含要继承的_WidgetBase、_InputWidgetMixin、_TemplatedMixin、_WidgetsInTemplateMixin时,这段代码没有得到解决 这还不够吗?这个问题现在不应该解决了吗 另外,如何在Nabble

我已经为我的自定义小部件定义了以下模板(这只是一个示例,它还不一定“有效”)

模板“车辆控制”

问题是,当我在WebStorm(JetBrains编辑器)中时,它显示
this.carSelect
无法解决问题。我不知道我在这段代码中缺少了什么,也不知道为什么当我包含要继承的_WidgetBase、_InputWidgetMixin、_TemplatedMixin、_WidgetsInTemplateMixin时,这段代码没有得到解决

这还不够吗?这个问题现在不应该解决了吗


另外,如何在Nabble中格式化代码?我需要什么代码标签来包围我粘贴到这里的代码?

模板中的小部件直到

您可能希望等到生命周期的
后期创建
部分开始使用模板中的小部件:

define([...], function(...){
  return declare("srcore.widget.input.VehicleControl", [_WidgetBase, _InputWidgetMixin, _TemplatedMixin, _WidgetsInTemplateMixin, _SecureWidgetMixin],{

    _templateString: dojo.cache("srcore", "widget/templates/VehicleControl.html"),

    _carDropdown: null

    postCreate: function(){
      //make sure any parent widget's postCreate functions get called.
      this.inherited(arguments);

      //can now work with this.domNode and this.carSelect
    }

});

我也不清楚为什么要简单地将对this.domNode和this.carSelect的引用复制到其他变量——您应该始终能够从小部件本身获取对这些属性的引用。

我认为它在编译时无法解析,但在运行时仍然可以工作。this.carSelect只是使用附加点来引用它来自我的小部件控件的dom节点。正如Buffalo提到的,任何dom访问都应该在postCreate中完成。也像他说的:“this.\u parentWidgetNode=this.domNode;”没有用,因为你可以在小部件的任何地方访问this.domNode。我不知道,伙计,我们并不总是使用PostXCreate和那些工作不正常的工具……我不能谈论其他用法,但是任何使用_TemplatedMixin构建小部件的东西在
buildRendering
阶段()结束之前都不会分配domNode
define(["dojo/_base/declare",
    "dojo/_base/array",
    "dojo/_base/lang",
    "dojo/on",
    "dijit/_Widget",
    "dijit/_TemplatedMixin",
    "dijit/_WidgetBase",
    "dijit/_WidgetsInTemplateMixin",
    "./_InputWidgetMixin",
    "../secure/_SecureWidgetMixin",
    "sc/widget/input/Select" // our extension of the base digit seelct
],
    function (declare, array, lang, on, _Widget, _TemplatedMixin, _WidgetBase, _WidgetsInTemplateMixin, _InputWidgetMixin, _SecureWidgetMixin)
    {
        return declare("srcore.widget.input.VehicleControl", [_WidgetBase, _InputWidgetMixin, _TemplatedMixin, _WidgetsInTemplateMixin, _SecureWidgetMixin],{

        _templateString: dojo.cache("srcore", "widget/templates/VehicleControl.html"),

        _carDropdown: null

        constructor: function() {
            this._parentWidgetNode = this.domNode;
            this._carDropdown =  this.carSelect;

...
define([...], function(...){
  return declare("srcore.widget.input.VehicleControl", [_WidgetBase, _InputWidgetMixin, _TemplatedMixin, _WidgetsInTemplateMixin, _SecureWidgetMixin],{

    _templateString: dojo.cache("srcore", "widget/templates/VehicleControl.html"),

    _carDropdown: null

    postCreate: function(){
      //make sure any parent widget's postCreate functions get called.
      this.inherited(arguments);

      //can now work with this.domNode and this.carSelect
    }

});