Получить файлы с помощью jQuery и транскрипта

У меня проблемы с тем, чтобы заставить jQuery работать с transcrypt. Вот мой код Я хотел бы получить файл с загрузкой и положить его в переменную. Функция read_file работает нормально и отображает переменную в элементе div. Но две другие функции не работают должным образом: read_hidden_var работает только после повторного нажатия на него, а read_file_var вообще не работает, выдавая ошибку: TypeError $.py_get не является функцией.

Вот код:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__pragma__ ('alias', 'S', '$')

class TestSystem:

    def read_file(self):
        S("#demo").load("https://raw.githubusercontent.com/bunkahle/Transcrypt-Examples/master/README.md")

    def read_hidden_var(self):
        document.getElementById('hidden_text').style.display='block'
        S("#hidden_text").load("https://raw.githubusercontent.com/bunkahle/Transcrypt-Examples/master/README.md")
        console.log(S("#hidden_text").html())
        self.file_content = S("#hidden_text").html()
        S("#hidden_text").html("")
        document.getElementById('hidden_text').style.display='none'
        alert(self.file_content)

    def read_file_var(self):
        S.get("https://raw.githubusercontent.com/bunkahle/Transcrypt-Examples/master/README.md", self.get_filecontent)

    def get_filecontent(self, response):
        self.file_content = response
        alert(self.file_content)

testSystem = TestSystem()

и HTML:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
    <script src="__javascript__/read_file2.js"; charset="UTF-8"></script>
    <title>Read File</title>
  </head>
  <body>
    <main>
        <h1>Read a file!</h1>
        <p id="p1" class="para1">Read a file!</p>
      <button id="button1" onclick="$(document).ready(read_file2.testSystem.read_file)">Click for retrieving text file</button><br><br>
      <button id="button1" onclick="$(document).ready(read_file2.testSystem.read_file_var)">Click for retrieving text file into var</button><br><br>
      <button id="button1" onclick="$(document).ready(read_file2.testSystem.read_hidden_var)">Click for retrieving text file into hidden paragraph</button><br><br>
      <p id="demo"></p>
      <p id="hidden_text"></p>
    </main>
  </body>
</html>

1 ответ

Отчет "py_get is not function" вызван псевдонимами. Слово get имеет особое значение в Python, так что по умолчанию это псевдоним py_get, который в этом контексте не существует. Вы можете либо unalias get или использовать js_get, так как это связано с get, Аналогичные параметры существуют для всех псевдонимов, что можно увидеть в списке предопределенных псевдонимов по адресу:

http://www.transcrypt.org/docs/html/special_facilities.html

В модифицированном коде ниже я использовал js_get, поскольку это имеет наименьшее влияние. (Чтобы найти модификации, найдите !!!)

С проблемой двойного щелчка труднее справиться. Я заменил код, связанный с этим, чистым JavaScript, и проблема остается. Поэтому я сильно подозреваю (но не уверен на 100%), что это что-то, не связанное конкретно с Transcrypt, а с базовой логикой программы. Но я не могу точно определить это.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__pragma__ ('alias', 'S', '$')

class TestSystem:

    def read_file(self):
        S("#demo").load("https://raw.githubusercontent.com/bunkahle/Transcrypt-Examples/master/README.md")

    def read_hidden_var(self):
        # !!! Literally inserted JavaScript does not solve the second problem,
        # so probably this isn't specific to Transcrypt
        __pragma__ ('js', '{}', '''
            console.log ("BEGIN read_hidden_var");
            document.getElementById("hidden_text").style.display="block";
            $("#hidden_text").load("https://raw.githubusercontent.com/bunkahle/Transcrypt-Examples/master/README.md");
            console.log($("#hidden_text").html());
            self.file_content = $("#hidden_text").html();
            $("#hidden_text").html("");
            document.getElementById("hidden_text").style.display="none";
            alert(self.file_content);
            console.log ("END read_hidden_var");
        ''')

    def read_file_var(self):
        # !!! Using js_get solves the first problem
        S.js_get("https://raw.githubusercontent.com/bunkahle/Transcrypt-Examples/master/README.md", self.get_filecontent)

    def get_filecontent(self, response):
        self.file_content = response
        alert(self.file_content)

testSystem = TestSystem()
Другие вопросы по тегам