注册表.byID 设置内容返回 无法获取未定义或空引用的属性'set'



尝试用注册表设置内容窗格的内容。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应该达到同样的效果。

最新更新