registry.byID设置内容返回无法获取属性'设置'未定义或空引用

时间:2014-07-22 16:16:20

标签: javascript dojo

尝试使用registry.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> 

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我认为小部件正在创建过程中,当您调用 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");

   });
}

});

答案 1 :(得分:0)

值得注意的是,自dojo 1.8以来,parser.parse()调用返回array with a Promise mixed in,因此推荐的与解析对象交互的方式是

parser.parse().then(function(){
    registry.byId('content'.set('content','test content');
});

使用dojo / ready应该会达到同样的效果。