Подключение Js файлов к общему scope не нарушая зависимости и не ломая сам проект.



  • Есть 100500 классов планируется сделать свой "фреймворк" или просто хорошую архитектуру по ботоводству на основе BAS.

    Есть несколько Js библиотек, и куча файлов классов.

    Задача 1:

    • подключить файл учитывая зависимости
    • ему надо класс А и класс Б, значит надо загрузить классы А и Б и лишь потом нужный файл

    Задача 2(проще)

    • просто подключить файлы 1-10 к глобальному scope без нарушения "всей системы BAS"

    Как вообще должен происходить процесс добавления js файла к проекту?

    • через "читать файл"?
    • через тег <script src""> ?
    • мб существует встроенные "плюшки для этого"? Аля include('class.js');


  • Идея в том, что бы управление происходило программным путем, а исполнение "эмуляции действий человека" оставить на сам BAS.

    Как я вижу сам процесс разработки:

    • всю логику действий перенести на js файлы и в тупую работать только с этими файлами(для программистов возможностей так больше , проще и нагляднее) с плюшками "не баса" вплоть до внедрения "плюшек", о которых даже разработчик баса не подозревает, что делают с его детищем :)
    • при необходимости вызывать функции "блоков баса" где будет 100% функционал только баса

    Для меня Бас, как один из инструментов в игре, под названием "программирование". И я хочу объеденить мои любимые игрушки с басом, не вызывая конфликтов в самом БАС :)



  • Нашел подобное(однако результат выполнения не понятен):
    /Browser/
    page().script("script.js")!
    VAR_SAVED_SCRIPT_RESULT = _result()

    Но, тут следует указывает расположение файла на компе, а есть ли возможность добавить в "какую то" папку, которая потом во время компиляции эти "скрипты" добавит в скомпилированный вид, абы не утерять их

    Хотелось бы побольше узнать о том, как работать с js файлами



  • В общем, я использовал подход из "кастыльно-ориентированного программирования", сделав include из readFile + eval.

    Хотелось бы узнать еще "способы" или как минимум узнать, как и куда добавлять папку с файлами, которая при компиляции "останется" и как к этой папке обращаться локально?

    Хочу мол: LOCAL_PATH + '/my_folder/scripts/'



  • Все же в кастыльно ориентированном подходе нашелся серьезный изьян :(

    Некоторые функции баса вызываются(для меня очень странно) с восклицательным знаком в конце...

    Для js, это считается синтаксическая ошибка при вызове eval, а функции баса без него не работают...

    0_1478376160199_ыыыБезымянный рисунок.png

    Как быть, что можно сделать, что бы "заработало"?



  • @UlybnisJe Добавлять код в движок можно создавая модули. В манифесте нужно указать список файлов

    https://github.com/bablosoft/BAS/blob/master/Modules/ReCaptcha2/js/manifest.json#L29

    Сами файл или файлы содержат js код, который добавляется к общему scope.

    https://github.com/bablosoft/BAS/blob/master/Modules/ReCaptcha2/js/engine.js

    page().script("script.js")!

    Добавляет код не в движок, а в браузер.

    Восклицательный знак в конце асинхронных функций - это небольшое расширение языка призванное избежать callback hell.

    Например, такой код

    sleep(1000)!
    log("Done")
    

    Будет преобразован в такой

    sleep(1000, function(){
       log("Done")
    })
    

    Если вызвать post("myurl",{})

    То функция вернется мгновенно не дожидаясь окончания запроса.



  • @support Блин, я честно уже малость устал...

    Подскажи пожалуйста, как я могу сделать пост запрос из кода с использованием обычных js callback'ов?

    Например в методе http_client_post_no_redirect, последний параметр это callback
    http_client_post_no_redirect(myResource, params, {"content-type":("urlencode"), "encoding":("UTF-8"), "method":("POST")}, function()
    {
    log('asdas');
    });

    Но как бы я его не описывал, хоть замыканием, хоть просто указывал название функции аля: myCallback

    Ничего корректно не работало, коллбек не вызывался без "!".
    А если использовал "!", тогда callback отработал, но сразу весь скрипт и завершил свою работу(весь, в смысле абсолютно весь скрипт завершил свою работу, хоть и должен был продолжить свою работу для следующий действий)

    Есть ли способ сделать post запрос без "!", стандартными средствами js? очень хочу!





  • @UlybnisJe

    Вот пример кода

    http_client_post(
       "google.com", 
       ["a","b"], 
       {"content-type":("urlencode"), "encoding":("UTF-8"), "method":("POST")},
       function(){
         log("Request done")
         sleep(1000,function(){
             log("Sleep done")          
             log("result length " + http_client_content().length)
         })
    
    })
    

    Выполнить пост запрос.
    Подождать секунду.
    Вывести длину ответа.

    Вот проект
    0_1478703792889_post.xml



  • @support ммм, а вы запускали сами этот "проект"?

    Я запустил и увидел тоже, что и с моими "потугами", а именно
    [18:22:22] Поток №1 : Поток выполнен успешно с сообщением "Ok"
    [18:22:22] Скрипт завершен корректно

    Никаких логов, никаких ответов от сервера...



  • @support я сейчас использую post запросы считай через стандартное "выполнить код" + "!". Там где надо сделать post, делаю типо

    app.currentTask.beforePost();//тут устанавливается url+params в обьекте bas.post на основе данных текущего обьекта

    _call(bas.post.run, null)! // затем просто вызываю пост, который определен в блоке "выполнить код" в начале проекта

    log(bas.post.result);

    где bas = global this



  • @UlybnisJe

    ммм, а вы запускали сами этот "проект"?

    Конечно запускал. Я каждый проект запускаю перед тем, как опубликовать на форуме.

    Никаких логов, никаких ответов от сервера...

    Работает через "запуск". Запись проекта без ! не работает.



  • @support ах вот в чем "магия", в записи не работает без "!"...

    Спасибо, даже не догадывался о подобном



  • @UlybnisJe Да, там к основному коду нужно добавить код начала новой секции. Когда последняя инструкция находится внутри, ее сложно найти.


Log in to reply