我用dojo移动的1.8.1和angularjs 1.0.1在worklight中做了一个项目,但是我遇到了一个奇怪的问题。
下面是我的html部分:
<div data-dojo-type="dojox.mobile.ScrollableView" data-dojo-props="selected:true" id="id1" ></div>
<div class="full" data-dojo-type="dojox.mobile.View" id="id2"></div>
还有我的JavaScript部分:
require([
"dojo", "dijit/_base/manager","dojo/parser", "dijit/registry",
], function(dojo) {
dojo.ready(function() {
// dijit.byId("id1").performTransition("id2"); //////////place I
});
});
var angularApp = angular.module('app', [])
.run(['$rootScope','$templateCache','$route',
function($rootScope,$templateCache,$route) {
dijit.byId("id1").performTransition("id2");////////place II
}]);
问题出在位置I,它运行良好,但当我在位置II输入“dijit.byId(“id1”)”时,它显示:
dijit.byId(“”).未定义
2条答案
按热度按时间x4shl7ld1#
ready函数是在dojo解析了文档并构造了您尝试使用dijit. byId获取的小部件之后执行的。
第二部分没有放在ready函数中,所以dojo还不能找到您的元素!
解决方案:在ready函数中访问您的元素或者不要声明它们(像您那样,使用html代码...)!
卢西恩
qltillow2#
dojo.ready()函数注册了一个事件处理函数(callback),它将在DOM解析完成后被触发,如果你想确保每个html元素在你执行操作之前都被重新呈现为dojo-widget,这是非常方便的。
因此,在您的示例中,代码II将在dijit.byId()函数通过加载必要的模块(dijit/registry,...)而变得可用之前执行,代码II只有在dom-ready事件被触发并且您的“dojo.ready()”函数确实加载了所需的模块之后才能工作。
你一定要花5分钟来阅读dojo.ready()是关于什么的:http://dojotoolkit.org/reference-guide/1.8/dojo/ready.html
旁注:在Dojo 1.8.1中,您不应该再使用dijit.byId()。尝试使用dijit.registry.byId()(您必须需要dijit/registry模块)。
http://dojotoolkit.org/reference-guide/1.8/dijit/registry.html#dijit-registry-byid