gpt4 book ai didi

javascript - 道场宣告正确方式

转载 作者:行者123 更新时间:2023-11-30 18:24:13 25 4
gpt4 key购买 nike

文件:dojo/dir1/utils/XmlJsonUtils.js

// Author: Rajat Khandelwal

define([
"dojo/_base/declare" // declare
], function(declare){
return declare("dir1.utils.XmlJsonUtils",[],{
parseXml : function (xml) {
var self=this;
var dom = null;
if (window.DOMParser) {
try {
dom = (new DOMParser()).parseFromString(xml, "text/xml");
}
catch (e) { dom = null; }
}
else if (window.ActiveXObject) {
try {
dom = new ActiveXObject('Microsoft.XMLDOM');
dom.async = false;
if (!dom.loadXML(xml)) // parse error ..

window.alert(dom.parseError.reason + dom.parseError.srcText);
}
catch (e) { dom = null; }
}
else
alert("cannot parse xml string!");
return dom;
},
xml2json : function (xmldata)
{
var self=this;
if(xmldata.firstChild==null)
{
return {name:xmldata.nodeName+": (value null)", checked: true}
}
else if(xmldata.firstChild.nodeType==3)
{
return {name:xmldata.nodeName+": "+xmldata.firstChild.nodeValue, checked:true}
}
else
{
var mychildren=[];
var i=0;
var nochildren=xmldata.childElementCount
for(i=0;i<nochildren;i++)
{
var j=self.xml2json(xmldata.childNodes[i])
mychildren[i]=j
}
var ret= {name:xmldata.nodeName, children:mychildren, checked:true}
return ret
}
},

convert2arr : function (result,ctr,res_arr)
{
var self=this;
if(result[ctr].checked[0]==false)
return;
if(result[ctr].children==undefined)
{
var name=result[ctr]['name'][0];
var kv = name.split(': ');
if(kv[1]=="(value null)")
kv[1]="";
res_arr.push.apply(res_arr,["<",kv[0],">",kv[1],"</",kv[0],">"]);
return ctr+1;
}
else
{
var i=ctr;
var new_ctr=ctr;
var no_children=result[ctr].children.length;
res_arr.push.apply(res_arr,["<",result[ctr].name[0],">"])
for(i=0;i<no_children;i++)
{
new_ctr=self.convert2arr(result,result[ctr].children[i]._0,res_arr)
}
res_arr.push.apply(res_arr,["</",result[ctr].name[0],">"]);
return new_ctr;
}
},
convert2xml : function (result)
{
var arr=[]
self.convert2arr(result, 0, arr)
return arr.join('')
}
})
})

但是当我在代码中需要 dir1.utils.XmlJsonUtils时,它说Uncaught Error: declare XmlJsonUtils: base class is not a callable constructor。声明一些实用函数的正确方法是什么。

那些应该像静态函数。我不想做 x=new XmlJsonUtils(); x.parseXml(..)。我想做 XmlJsonUtils.parseXml(..)

最佳答案

你的类不应该定义构造函数方法,dojo.declare 应该处理这个。但是,这样做没有坏处,只需定义一个空白的 constructor: function() { } .我怀疑你遇到了某种错误。

define 是应该的,'define' 用于 require-scope,当运行 require(["my.module"]) 时,它应该有一个 define 方法,它通过 declare 返回基类。

文件: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

这样(您必须有一个引用,通过 require 或 getObject 引入),您可以使用 StaticCallable 函数而无需初始化/构建模块的实例。符合 AMD 标准的语法如下:

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

或者如果之前需要

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

一个具体的例子可以是像下面这样的通用类,其中实例和静态访问都是可能的。基类定义“工具”,派生类定义“工具”操作的变量 - 如果实例化,则可以订阅默认主题 - [ MessageBusBase | MessageBus ]

关于javascript - 道场宣告正确方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11329163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com