Dojox не определен - PullRequest
       15

Dojox не определен

1 голос
/ 08 марта 2012

Я пытаюсь использовать COMET с dojo, и это не удается в первой строке примера с сообщением

dojox не определено

Я должен что-то пропуститьочевидное

это страница (ошибка в первой строке ТЕЛА):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <title></title>
   <script src="dojo/dojo.js"
           data-dojo-config="async:true, parseOnLoad:true">
   </script>
   <script>
      require( ["dojox/socket"] );
   </script>
</head>
<body>
<script type="text/javascript">
   var socket = dojox.socket( "/cometd" );
   function send( data ) {
      return socket.send( dojo.toJson( data ) );
   }
   socket.on( "connect", function () {
      // send a handshake
      send( [
         {
            "channel":"/meta/handshake",
            "version":"1.0",
            "minimumVersion":"1.0beta",
            "supportedConnectionTypes":["long-polling"] // or ["callback-polling"] for x-domain
         }
      ] )
      socket.on( "message", function ( data ) {
         // wait for the response so we can connect with the provided client id
         data = dojo.fromJson( data );
         if ( data.error ) {
            throw new Error( error );
         }
         // get the client id for all future messages
         clientId = data.clientId;
         // send a connect message
         send( [
            {
               "channel":"/meta/connect",
               "clientId":clientId,
               "connectionType":"long-polling"
            },
            {  // also send a subscription message
               "channel":"/meta/subscribe",
               "clientId":clientId,
               "subscription":"/foo/**"
            }
         ] );
         socket.on( "message", function ( data ) {
            alert( "message from server " + data )
         } );
      } );
   } );
</script>
</body>
</html>

1 Ответ

1 голос
/ 08 марта 2012

Вы смешиваете AMD и синтаксис модуля старого стиля.Новый стиль AMD require не создаст глобальную переменную для вашего пространства имен, как это делал старый dojo.require.

Перепишите код, чтобы полностью использовать новый стиль AMD.или удалите флаг async=true, который вы добавили при загрузке dojo, чтобы снова включить поддержку старого стиля модуля.

В любом случае, это не должно быть сложно переписать это в стиле AMD ...

require([
    'dojo/_base/json', //_base is for things that used to be in the root dojo namespace.
    'dojox/socket'
],function(
    json,
    dojox_socket
){
    var socket = dojox_socket( "/cometd" );
    function send( data ) {
        return socket.send( json.toJson( data ) );
    }
    // and so on...
}); 

(Кстати, вы также можете удалить флаг "parseOnLoad", если вы не используете никаких декларативных виджетов в своем оригинальном html)

...