2009-09-09 3 views
4

Это был мой первый сборник dojo, поэтому, пожалуйста, извините мое невежество в этом вопросе.Dojo build -> dojo.require(); все еще нужно?

Я только что создал мой обычай строить из системы додзё сборки, используя следующую (очень упрощенно) профиль:

dependencies = { 
stripConsole: "normal", 

layers: [  
    { 
     name: "../dijits/cx/dijitsCXbuild.js", 
     copyrightFile: "CopyrightCX.txt", 
     dependencies: [ 
      "dojo.parser", 
      "dijit.dijit",    
      "dijit._Widget", 
      "dijit._Templated", 
      "dijit._Container", 
      "dojo.i18n", 
      "dojo.NodeList-fx", 
      "dojox.grid.cells", 
      "dojox.grid.DataGrid", 
      "dojox.layout.GridContainer", 
      "dijit.TitlePane", 
      "dijits.cx.TaskPanel", 
      "dijits.cx.Identify" 
     ] 
    } 
], 

prefixes: [   
    [ "dijit", "../dijit" ], 
    [ "dojox", "../dojox" ], 
    [ "dijits.cx", "../dijits/cx" ] 
] 

}

... ну, это все вырученные средства в порядке, и я получаю мой собственный пакет со всем, что я просил. Тогда в моем веб-приложение I включают в себя следующие

<script type="text/javascript"> 
    djConfig = { 
    isDebug:false, 
    parseOnLoad:true, 
    locale:getLocale() 
    }; 
</script> 

<script type="text/javascript" src="Lib/cxdojo/dojo/dojo.js"></script> 
<script type="text/javascript" src="Lib/cxdojo/dijits/cx/dijitsCXbuild.js"></script> 

... выглядит нормально, пока код не требуется экземпляр первого Dijit и он терпит неудачу с пресловутое: «dijits.cx TaskPanel не является конструктором.»

Я могу избавиться от этой проблемы, включив «dojo.require()», но это то, что я, хотя я избавлюсь, создав собственную собственную сборку. Любые идеи о том, что я делаю неправильно или что мне делать, чтобы избежать «dojo.require()» линий ... спасибо кучи.

ответ

4

Вам все еще нужен dojo.require в вашем файле. Сжатая сборка просто предотвращает выполнение dojo.require запроса GET для файла, который требуется путем объединения всех файлов в один файл и сокращения его. Это значительно экономит циклы загрузки страницы (как я уверен, вы уже видели).

Если вы действительно хотите избавиться от многих dojo.require (который я не слишком люблю, потому что я хотел видеть то, что используется на странице), вы можете сделать что-то вроде этого:

dojo.provide('my.main'); 
dojo.require('dijit.cx.TaskPane'); 
... all the other dojo.require statements ... 

Тогда поместить это в файл в директории параллельно додзе:

Lib/cxdojo/my/main.js 
    Lib/cxdojo/dojo/dojo.js 
    .. etc ... 

Затем измените зависимости быть:

  dependencies: [ 
        "my.main" 
      ] 

Затем в файле, вы можете включить его с тэгом:

<script type="text/javascript" src="Lib/cxdojo/my/main.js"></script> 

Затем вам нужно только один требуется:

dojo.require('my.main'); 

Еще одним преимуществом такого подхода является то, что вам нужно всего лишь изменить один файл (/my/main.js) при добавлении модуля в приложение.

+0

Спасибо за понимание. Я попробую, я уже видел это где-то (используя файл ссылок), но я думал, что зависимостей профиля будет достаточно. Спасибо, кучи! – belzebu

+0

добро пожаловать. Вернись, если у тебя есть вопросы. – seth

+0

На самом деле можно объединить свой слой в один большой файл, если вы назовете его «dojo/dojo.js». См. Https://dojotoolkit.org/documentation/tutorials/1.8/build/ (Профиль сборки приложения примерно на полпути вниз). В нем есть «... слои [dojo/dojo.js»]. Include: [.... «app/main», «app/run»] ... 'и помещает их прямо под обычным dojo.js содержание. Затем просто установите djConfig с помощью 'parseOnLoad: true' для разбора разметки – mschr

Смежные вопросы