【问题标题】:Using ParseServer Backend JS Library in QML在 QML 中使用 ParseServer 后端 JS 库
【发布时间】:2020-05-06 00:09:15
【问题描述】:

我正在尝试在 QML (Qt 5.14) 中使用 https://unpkg.com/parse/dist/parse.min.js 的 Parse Browser Javascrip 库。

我的 QML 文件看起来像这样:

import QtQuick 2.12
import QtQuick.Window 2.12
import "parse.js" as Parse

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Component.onCompleted: {
    Parse.serverURL = "https://parseapi.back4app.com"; // This is your Server URL
    Parse.initialize("BCrUQVkk80pCdeImSXoKXL5ZCtyyEZwbN7mAb11f", /* This is your Application ID */ "4wPYRKbpTJeCdmFNaS31AiQZ8344aaYubk6Uo8VW");// This is your Javascript key
    }
}

取自https://dashboard.back4app.com/apidocs?javascript#initializing-parse-sdk

但是 QML 输出在库中给了我一个 typeError 并说我无法写入全局属性:

qrc:/parse.js:13: TypeError: Type error
qrc:/main.qml:12: Error: Invalid write to global property "serverURL"

非常感谢任何帮助 - 我真的不想自己使用 XmlHttpRequest 实现所有调用。

【问题讨论】:

    标签: javascript qt parse-platform qml back4app


    【解决方案1】:

    虽然 QML 与 ES7 兼容,但它没有与 Web 浏览器相同类型的 Javascript 运行时。例如,没有 Window 或 Document 类/对象,也没有跨域安全性。有关支持的更多信息,请参阅:

    https://doc.qt.io/qt-5/qtqml-javascript-functionlist.html

    另外,关于您的错误消息,请参阅此处如何处理全局范围的 javascript:

    https://doc.qt.io/qt-5/qtqml-javascript-hostenvironment.html

    以及 Javascript 导入的一般工作原理:

    https://doc.qt.io/qt-5/qtqml-javascript-imports.html

    在这种特殊情况下,您希望像这样引用它:

    Parse.Parse.serverURL = "https://parseapi.back4app.com";
    

    但是,该 JS 文件可能在 QML 环境中存在问题,因为它可能主要寻找 Node.js 或与浏览器兼容的 Javascript 环境。

    您最好在此处使用未压缩版本:https://unpkg.com/parse@2.13.0/dist/parse.js

    并查看是否可以通过修复依赖于浏览器或仅 Node 功能的代码将其移植到 QML。我已经用其他一些软件包做了几次,通常需要相当多的努力才能让它工作。

    【讨论】:

    • 不幸的是,我对可能在 parse.js 文件中使用的 Node 和其他 JS 框架知之甚少;所以我怀疑我能否将它移植到 QML。不幸的是,该应用程序应该是跨平台的(Android + iOS 和 MacOS 和 Windows),所以我怀疑我是否会通过为每个平台使用任何 API 来解决这个问题。不过,我可能会尝试使用低级 C API。
    • @denish 另一种方法是使用基于 CURL 请求(REST API)的 QNetworkAccessManager 实现您自己的库:dashboard.back4app.com/apidocs?shell#introduction
    • 注意,您不必在原始 XMLHttpRequest 上实现自己的调用。像 Superagent.js 这样的库很容易移植到 QML JS 环境中,并且可以更轻松地使用 REST API。
    猜你喜欢
    • 2016-11-24
    • 2016-02-04
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多