gwt ленивая загрузка

var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];    
function ValidateSingleInput(oInput) {
    if (oInput.type == "file") {
        var sFileName = oInput.value;
         if (sFileName.length > 0) {
            var blnValid = false;
            for (var j = 0; j < _validFileExtensions.length; j++) {
                var sCurExtension = _validFileExtensions[j];
                if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {
                    blnValid = true;
                    break;
                }
            }
             
            if (!blnValid) {
                alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", "));
                oInput.value = "";
                return false;
            }
        }
    }
    return true;
}
File 1: <input type="file" name="file1" onchange="ValidateSingleInput(this);" /><br />
File 2: <input type="file" name="file2" onchange="ValidateSingleInput(this);" /><br />
File 3: <input type="file" name="file3" onchange="ValidateSingleInput(this);" /><br />

5
задан sth 29 July 2010 в 07:13
поделиться

5 ответов

GWT с готовностью не поддерживает это начиная со всего кода Java, который является (или скорее может быть), требуемый для модуля, который Вы загружаете, компилируется в единственный файл JavaScript. Этот единственный файл JavaScript может быть большим, но для нетривиальных модулей это меньше, чем эквивалентный рукописный JavaScript.

У Вас есть сценарий, где единственный сгенерированный файл JavaScript является слишком большим?

0
ответ дан 14 December 2019 в 09:05
поделиться

Я думаю, что это - то, что Вы ищете.

<body onload="onloadHandler();">
<script type="text/javascript">
function onloadHandler() {
    if (document.createElement && document.getElementsByTagName) {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = './test.js';
        var heads = document.getElementsByTagName('head');
        if (heads && heads[0]) {
            heads[0].appendChild(script);
        }
    }
}
function iAmReady(theName) {
   if ('undefined' != typeof window[theName]) {
       window[theName]();
   }
}
function test() {
   // stuff to do when test.js loads
}        
</script>

- test.js

iAmReady('test');

Протестированный и работающий в Firefox 2, Safari 3.1.2 для Windows, IE 6 и Opera 9.52. Я предполагаю, что версии-уровня тех должны работать также.

Обратите внимание, что загрузка является асинхронной. При попытке использовать функцию или переменную в загруженном файле сразу после вызова appendChild() это, скорее всего, перестанет работать, именно поэтому я включал обратный вызов в загруженный файл сценария, который вынуждает функцию инициализации работать, когда сценарий сделан, загрузившись.

Вы могли также просто вызвать внутреннюю функцию в нижней части загруженного сценария, чтобы сделать что-то, после того как он загрузился.

0
ответ дан 14 December 2019 в 09:05
поделиться

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

Эффективно модули создают свое собственное пространство имен, подобное, что Вы входите в Java при загрузке того же класса через два отдельных загрузчика класса. На самом деле, потому что компилятор GWT только компилирует в методах, на которые ссылаются в Вашем коде (т.е. он делает устранение мертвого кода), возможно, что один модуль будет включать другое подмножество методов от общего класса до другого модуля.

Таким образом, необходимо уравновесить, лучше ли, загружая все это как один монолитный модуль и получая первичный удар первый раз вокруг, чем наличие нескольких модулей, кумулятивный размер кода которых мог бы хорошо быть значительно больше, чем единственный подход модуля.

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

0
ответ дан 14 December 2019 в 09:05
поделиться

Попытайтесь загрузить большое приложение GWT "одним первичным" подходом с помощью iPhone или iPod touch... он никогда не будет загружаться.

Подход модуля является a, но большим количеством complexe для управления, но лучше для клиентских устройств меньшего размера.

Теперь, как я загружаю модуль из своего кода Java, не используя iFrame?

  • Erick
0
ответ дан 14 December 2019 в 09:05
поделиться

Ознакомьтесь с GWT.runAsync , а также с докладом о вводе-выводе Google ниже, в котором рассматривается отложенная загрузка JavaScript в GWT. проектов.

7
ответ дан 14 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: