John
John

Reputation: 475

Coding with Dojo, received error 'dijit.byId(...)' is null or not an object

I see many references to this error on the web, but they are not helping me. I guess i am new enough to this that i need a specific answer for my problem.
I am attaching the first portion of code on a page that i am running. the last line i show is the line that is creating the error stating in the title. Please let me know if you have any suggestions. Thank you!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
  <title>CDI Web Portal</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
   <script src="js\dojo\dojo.js" type="text/javascript"></script>
  <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAA5a4NhilcmrdMQ5e3o22QWRQWrGbhbxAguaJ-a4SLWYiya7Z2NRTDfQBdxmHdf5ydkZYLZTiz1tDXfg"></script>
  <script type="text/javascript" src="ge-poly-fit-hack.js"></script>
  <script type="text/javascript" src="kmldomwalk.js"></script>
  <style type="text/css">
    @import "js/dijit/themes/tundra/tundra.css";
    @import "js/dojo/resources/dojo.css";
  </style>
  <style type="text/css">@import "index.css";</style>

    <script type="text/javascript"> dojo.ready(function() { dojo.byId("greeting").innerHTML += ", from " + dojo.version; });     </script>

<script type="text/javascript">
    // <![CDATA[

    djConfig = { parseOnLoad: true };
   // google.load("dojo", "1.6.1");
    google.load("maps", "2");
    google.load("earth", "1");

    var g_ge;
    var g_earthDisabled = false;
    var g_kmlObject;

    google.setOnLoadCallback(function() {
        dojo.require('dijit.layout.BorderContainer');
        dojo.require('dijit.layout.SplitContainer');
        dojo.require('dijit.layout.ContentPane');
        dojo.require('dijit.Tree');
        //dojo.require('CheckboxTree');
        dojo.require('dijit.form.CheckBox');
        dojo.require('dijit.form.Button');
        dojo.require('dijit.form.TextBox');
        dojo.require('dojo.data.ItemFileWriteStore');
        dojo.require('dojo.parser');
        dojo.require('dojo.cookie');
        dojo.require('dojo.fx');
        dojo.addOnLoad(function() {
            // load checkboxtree
            var scpt = document.createElement('script');
            scpt.src = "dijit.CheckboxTree.js";
            document.body.appendChild(scpt);

            { dijit.byId('load-button').setDisabled(true) };
            // build earth
            google.earth.createInstance(
      'map3d',
      function(ge) {
          g_ge = ge;
          g_ge.getWindow().setVisibility(true);
          g_ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
          g_ge.getLayerRoot().enableLayerById(g_ge.LAYER_BORDERS, true);
          g_ge.getLayerRoot().enableLayerById(g_ge.LAYER_BUILDINGS, true);

          dijit.byId('load-button').setDisabled(false);
          checkAutoload();
      },
      function() {
          g_earthDisabled = true;
          dijit.byId('load-button').setDisabled(true);

Upvotes: 2

Views: 5049

Answers (2)

Fu Cheng
Fu Cheng

Reputation: 3395

From your comment, you used declarative syntax to create the dijit, i.e. <button id="load-button" dojoType="dijit.form.Button" onclick="loadKml();">. If the declarative syntax is used, the dijit is actually created after the page is loaded. So you should put the code to use the dijit in the Dojo's load callback, i.e. inside of dojo.addOnLoad callback.

But your code is bad formatted and mingled with Google Maps load callback, it's not easy to inspect the code. My suggestion would be to wrap the dijit.byId('load-button').setDisabled(true); with dojo.addOnLoad, like below:

dojo.addOnLoad(function() {
    dijit.byId('load-button').setDisabled(true);
});

Upvotes: 3

Charlie Martin
Charlie Martin

Reputation: 112366

It means that you've got a dojo object rather than a dijit object -- or possibly no object named load-button at all, since it's not clear from this where load-button is being created. Make sure there is an object with id="load-button" that was created with dijit.

Upvotes: 0

Related Questions