Подключение 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

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


  • administrators

    @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? очень хочу!




  • administrators

    @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


  • administrators

    @UlybnisJe

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

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

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

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



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

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


  • administrators

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


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.