dojo 未在Worklight中定义dijit.byId(“”),与Angularjs配合使用

r1zk6ea1  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(116)

我用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(“”).未定义

x4shl7ld

x4shl7ld1#

ready函数是在dojo解析了文档并构造了您尝试使用dijit. byId获取的小部件之后执行的。
第二部分没有放在ready函数中,所以dojo还不能找到您的元素!

解决方案:在ready函数中访问您的元素或者不要声明它们(像您那样,使用html代码...)!

卢西恩

qltillow

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

相关问题