dojo declare correct way

走远了吗. 提交于 2019-12-02 03:21:23

Your class should not have to have the constructor method defined, dojo.declare is supposed to handle this.. However, doing so doesnt hurt, simply define a blank constructor: function() { }. I suspect youre facing some sort of bug.

The define is as should be, 'define' is used for the require-scope, when running require(["my.module"]), its expected to have a define method, which returns the base class via declare.

file: dojo/dir1/utils/XmlJsonUtils.js:

define([
   // requirements
   "dojo/_base/declare", 
   "dir1/utils/Toolkit" // sample in-package dependency
   "./Toolkit"     // Same as Above
], function (declare) {
   // no slash separator, use dot with declare, 
   // use a reference and return on last line
   var Klass = declare(
   /// declaredClass: string, moduleUrl with dot-separater + filename /.js//
       "dir1.utils.XmlJsonUtils",
   /// base class: Array(mixins)
       [],
   /// class scope
       {
           _methodMeantToBePrivate: function() { },
           randomInstanceMethod: function() { }
       }
   ); // end declare


   // set any aliases, which you want to expose (statics)

   Klass.StaticCallable = function() {
       // careful with your scope access inhere
   }

   // return the declared class to 'define'
   return Klass;
}); // end define

This way (you must have a reference, either pulled in with require or getObject), you could use the StaticCallable function without initializing / constructing an instance of the module. AMD compliant syntax is like so:

require(["dir1/utils/XmlJsonUtils"], function(xmlUtils) {
   xmlUtils.StaticCallable();
});

or if previously required

var xmlUtils = dojo.getObject("dir1.utils.XmlJsonUtils")
xmlUtils.StaticCallable();

A specific example could be a versatile class like the following, where both instance and static access is possible. Base class defines 'tools', derived class defines the variables the 'tools' operate on - and if instantiated, the default topics can be subscribed - [ MessageBusBase | MessageBus ]

Waseem

The issue: in your code.

return declare("dir1.utils.XmlJsonUtils",[],{
    parseXml : function (xml) {

Instead of dir1.utils.XmlJsonUtils use dir1/utils/XmlJsonUtils, i.e., use slashes instead of dots in your function declaration.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!