Javascript dijit.byId不工作(不是函数?)
这是我的简单dojo示例:Javascript dijit.byId不工作(不是函数?),javascript,ajax,dojo,Javascript,Ajax,Dojo,这是我的简单dojo示例: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dijit/themes/dijit.css"> <link rel="st
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dijit/themes/dijit.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dijit/themes/claro/claro.css">
<title>ShowMovies </title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" data-dojo-config="isDebug: false, async: true, parseOnLoad: true" src="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo.js"></script>
<script type="text/javascript">
require(
[ "dojo", "dojo/parser", "dijit/layout/BorderContainer",
"dijit/layout/ContentPane", "dojox/grid/DataGrid",
"dojo/data/ItemFileReadStore" ],
function(dojo) {
dojo.ready(function() {
dojo.xhrGet( {
url : "MovieList.json",
handleAs : "json",
load : function(response, ioArgs) {
var newData = {
identifier: "title",
items: response.result
};
var dataStore = new dojo.data.ItemFileReadStore({data: newData, id:"dataStoreId"});
var grid = dijit.byId("gridId");
grid.setStore(dataStore);
},
error : function(response, ioArgs) {
alert(response);
}
});
});
});
</script>
<link rel="stylesheet" type="text/css" title="Style" href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojox/grid/resources/Grid.css">
<link rel="stylesheet" type="text/css" title="Style" href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojox/grid/resources/claroGrid.css">
</head>
<body class="claro">
<div id="BorderContainer" style="height: 100%; width: 100%"
data-dojo-type="dijit.layout.BorderContainer"
data-dojo-props="design:'headline'">
<div data-dojo-type="dijit.layout.ContentPane"
data-dojo-props="region:'top'" style="text-align: center">My Movie Web Application!</div>
<div data-dojo-type="dijit.layout.ContentPane"
data-dojo-props="region:'center'">
<table id="gridId" autowidth="true"
data-dojo-type="dojox.grid.DataGrid"
data-dojo-props="rowSelector:'20px'">
<thead>
<tr>
<th field="title">Title</th>
<th field="director">Director</th>
<th field="actor">Actor</th>
<th field="description">Description</th>
</tr>
</thead>
</table>
</div>
<div data-dojo-type="dijit.layout.ContentPane"
data-dojo-props="region:'right'"></div>
</div>
</body>
</html>
放映电影
要求(
[“dojo”、“dojo/parser”、“dijit/layout/BorderContainer”,
“dijit/layout/ContentPane”、“dojox/grid/DataGrid”,
“dojo/data/ItemFileReadStore”],
函数(dojo){
ready(function()){
dojo.xhrGet({
url:“MovieList.json”,
handleAs:“json”,
加载:函数(响应、ioArgs){
var newData={
标识符:“标题”,
项目:答复.结果
};
var dataStore=new dojo.data.ItemFileReadStore({data:newData,id:“dataStoreId”});
var grid=dijit.byId(“gridId”);
网格设置存储(数据存储);
},
错误:函数(响应,ioArgs){
警报(响应);
}
});
});
});
我的电影网络应用程序!
标题
经理
演员
描述
为什么我会收到xhrGet请求的错误?响应是:dijit.byid不是函数
Thx快速的答案是:当Dojo配置中有
async:true
时,Javascript代码中可能不应该有任何以Dojo.
或dijit.
开头的内容
回到过去,在Dojo1.5和更早的版本中,Dojo及其模块的工作方式与今天略有不同
那时,您可以包括dojo.js,并立即提供一系列方便的功能,例如dojo.create
,dojo.connect
,dojo.xhrGet
,dijit.byId
等等。如果您想包含一些额外的模块或小部件,可以使用dojo.require
,然后使用dojo.some.thing
或dijit.other.thing
引用该模块
在较新版本的Dojo中,当您在页面上包含Dojo.js时,实际上只会得到两个函数:require
和define
。您可以使用这些函数“导入”所需的所有内容。即使对于像dojo.create
这样的小东西,您也必须导入一个模块
一开始,你可能会觉得这很不方便。如果您对Dojo为什么选择这个方向以及它的好处感兴趣,您可以看看这个
回到你的代码。您有async:true
和许多dojo.
和dijit.
语句。以下是三种解决方法:
async:true
更改为false。这使得Dojo以“旧”风格处理代码,即您的Dojo.
和dijit.
应该仍然可以工作async:true
,但导入特殊的dijit/dijit
模块,使旧的dijit.
函数可用。所以你的第一行应该是这样的:
require([“dojo”,“dijit/dijit”,..),function(dojo,dijit,…){
(dojo模块也是一个允许“旧”样式的特殊模块。)
dojo.
和dijit.
,您需要找出需要导入的模块。如果您已经有很多dojo代码,那么这将是一个小工作。您问题中的代码如下所示:你可能在想:为每件小事加载一个文件/模块一定很慢!你是对的。这个想法是,当你在本地开发时,它会足够快,当你部署你的web应用程序时,你将使用Dojo的构建工具在很少的文件中创建一个精益包。这是Dojo的绝对优势之一,你可以更多信息请点击此处:非常感谢您详细的回答!!您帮了我很多忙!