【发布时间】:2011-08-04 09:08:06
【问题描述】:
使用一些教程,我编写了简单的小部件,但它导致错误“declare customwidget.TestDijit: mixin #0 is unknown”:
//test.html
<title>Test</title>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.xd.js" djConfig="parseOnLoad:true">
</script>
<script type="text/javascript" src="Test.js"> </script>
<script type="text/javascript">
dojo.require("customwidget.TestWidget");
</script>
</head>
<body>
<div dojoType='customwidget.TestWidget'/>
</body>
//test.js
dojo.provide('customwidget.TestDijit')
dojo.require('dijit._Widget');
dojo.require('dijit._Templated');
dojo.require('dojo.caсhe');
dojo.declare("customwidget.TestDijit", [dijit._Widget, dijit._Templated],
{
//can't use dojo.caсhe('customwidget.template', 'testdijit.html') I don't know why
templatePath : "",
widgetsInTemplate : true,
lang : 'EN',
postCreate: function(args, frag)
{
this.inherited('postCreate', arguments);
},
clickEvent : function()
{
alert("Button Click event");
}
});
//testdijit.html
<div id="${id}">
<input dojoattachevent="onClick: clickEvent" dojotype="dijit.form.Button" label="Search" />
</div>
我发现如果我将所有小部件的代码放在 dojo.ready 函数中,那么它将起作用(感谢this article)。当然,我不想把我所有的js代码都放在ready函数中。在提到的文章的代码示例中作者写了// Future tutorials will explain how to properly separate this out into its own file.
你知道如何解决这个问题吗?
PS。你也知道为什么我在这个js代码中不能使用dojo.cash吗?
UPD:加载跨域资源时出现问题。 here 是类似的讨论,但我无法理解如何解决问题。我可以在本地存储 dojo,但在这种情况下它找不到我的 TestWidget.js - 我不知道如何指定我的 scipts 的路径。如果我使用 baseUrl 执行此操作,它会显示“无法加载 'dojo._base.lang';上次尝试 './_base/lang.js'”。
test/test.html
<!DOCTYPE html>
<head>
<title>Test</title>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/resources/dojo.css">
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojox/grid/resources/Grid.css">
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojox/grid/resources/claroGrid.css">
<link rel="stylesheet" href="css/layout.css">
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.xd.js"
djConfig="parseOnLoad:true, baseUrl: './'">
</script>
<script type="text/javascript">
dojo.require("customwidget.TestWidget");
</script>
</head>
<body class="claro">
<div dojoType='js.Test'>
</div>
</body>
test/customwidget/TestWidget.js
dojo.provide('customwidget.TestWidget')
dojo.require('dijit._Widget');
dojo.require('dijit._Templated');
dojo.require("dijit.form.Button");
//dojo.require('dojo.cache');
dojo.declare("customwidget.TestWidget", [dijit._Widget, dijit._Templated],
{
templatePath : "",//dojo.cache('customwidget.template', 'testdijit.html'),
widgetsInTemplate : true,
lang : 'EN',
postCreate: function(args, frag)
{
this.inherited('postCreate', arguments);
},
clickEvent : function()
{
alert("Button Click event");
}
});
【问题讨论】:
标签: javascript widget dojo