尝试用注册表设置内容窗格的内容。byId,但我无法获得对象-我得到以下错误:
JavaScript运行时错误:无法获取未定义或空引用的属性'set'
我的代码是这样的: require(["dojo/parser", "dojo/dom", "dijit/registry",
"dojox/layout/ContentPane", "dojo/domReady!"],
function (parser, dom, registry) {
parser.parse();
registry.byId("Content").set("content", "Test Content");//Content ID is not being found
});
</script>
<div data-dojo-type="dijit/layout/BorderContainer" id="Main" style="width: 100%; height: 100%">
<div data-dojo-type="dojox/layout/ContentPane" id="TOC" data-dojo-props="splitter: true, region:'leading'">
TOC
</div>
<div data-dojo-type="dojox/layout/ContentPane" id="Content" data-dojo-props="splitter: true, region:'center'">
</div>
任何想法?谢谢!
我认为小部件正在创建过程中,当您调用registry.byId()调用时,它们还没有准备好。
您需要通过包含"dojo/ready"模块在ready()调用中添加初始化代码。
require(["dojo/parser", "dojo/dom", "dijit/registry", "dojo/ready",
"dojox/layout/ContentPane"],
function (parser, dom, registry, ready) {
parser.parse();
ready( function(){
// your code goes here.
registry.byId("Content").set("content", "Test Content");
});
}
});
值得注意的是,自dojo 1.8以来,parser.parse()
调用返回一个混合了Promise的数组,因此与已解析对象交互的推荐方式是
parser.parse().then(function(){
registry.byId('content'.set('content','test content');
});
使用dojo/ready应该达到同样的效果。