我正在维护和扩展一个AMD之前的旧项目.我想在应用程序中添加一个图表.为此,我创建了一个js文件,如下所示:
define(["dojox/charting/Chart",...."dijit/Dialog","dojo/dom-construct"],
function (Chart) {
function showDailyChart(data){
//code to show the chart in a dialog
}
return customModules.singleChart;
});
Run Code Online (Sandbox Code Playgroud)
我已将此文件另存为 /customModules/singleChart.js
在我的主HTML页面中,我已将其添加到包中,如下所示:
var dojoConfig = { parseOnLoad: true,
packages: [....,{"name":"customModules",
"location":location.pathname.replace(/\/[^/]+$/, "")+"/modules" }
]};
Run Code Online (Sandbox Code Playgroud)
我想称之为的功能是AMD之前的功能.所以我称之为:
dojo.require("customModules.singleChart");
.
.
.
customModules.singleChart.showDailyChart(data);
Run Code Online (Sandbox Code Playgroud)
我可以看到它/customModules/singleChart.js在Firebug控制台和Net Tab中加载.但是没有任何customModules.singleChart对象.奇怪的是,也没有错误.我在Firebug中测试了这个,以及谷歌Chrome的开发者工具.
使用AMD模块的正确方法是什么dojo.require?或者有更好的方法来做我需要的吗?
要使用具有pre-AMD代码的窗口小部件,您需要使用dojo/_base/define声明模块,并将define函数的第一个参数设置为点表示法中的模块ID,如下所示:
define(["dojo/_base/declare","dojox/charting/Chart",...."dijit/Dialog","dojo/dom-construct"], function (declare, Chart){
return declare("customModules.singleChart", null, {
showDailyChart: function(data){
//code to show the chart in a dialog
}
});
});
Run Code Online (Sandbox Code Playgroud)
declare函数的第二个参数是您继承的类或类列表,在这种情况下为null.
然后,您可以通过使用"new"关键字对其进行实例化来使用此小部件.
var foo = new customModules.singleChart();
foo.showDailyChart(data);
...
Run Code Online (Sandbox Code Playgroud)
如果你想要一个静态函数,你可以这样做:
define(["dojo/_base/declare","dojox/charting/Chart",...."dijit/Dialog","dojo/dom-construct"], function (declare, Chart){
var widget = declare("customModules.singleChart", null, {
});
widget.showDailyChart = function(data){
//code to show the chart in a dialog
}
return widget;
});
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
customModules.singleChart.showDailyChart(data);
Run Code Online (Sandbox Code Playgroud)
更多细节:http://dojotoolkit.org/reference-guide/1.9/dojo/_base/declare.html#signature
| 归档时间: |
|
| 查看次数: |
5230 次 |
| 最近记录: |