QML 中的 JS 要求

Posted

技术标签:

【中文标题】QML 中的 JS 要求【英文标题】:JS require in QML 【发布时间】:2015-04-25 13:57:02 【问题描述】:

我在 QML 应用程序中使用 dbox 库(源代码位于 github)。在 QML 文件中,我使用以下代码导入 dbox 库:

import "./dbox-master/lib/dbox.js" as Dbox

那我这样用:

var app   = Dbox.app( "app_key": root.appKey, "app_secret": root.appSecret )

但是,在dbox.js 中有一系列require 语句,位于文件顶部:

define(['require', 'request', 'querystring', 'path'], function (require) 
    var request = require('request');
    var qs = require('querystring');
    var path = require('path');
    var helpers_ = require("./helpers")
//    var request = require('request');
);
//var request = require("request")
//var qs      = require("querystring")
//var path    = require("path")
//require(['request'], function (foo) 
//    console.log('request is loaded')
//);

exports.app = function(config)
  var root   = config.root  || "sandbox"
  var helpers = helpers_(config)

  return 
    root: root,

    requesttoken: function(cb)
      var signature = helpers.sign()
      var body = qs.stringify(signature)
      var args = 
        "method": "POST",
        "headers":  
          "content-type": "application/x-www-form-urlencoded",
          "content-length": body.length
        ,
        "url": "https://api.dropbox.com/1/oauth/request_token",
        "body": body
      
      return request(args, function(e, r, b)
        var obj = qs.parse(b)
        obj.authorize_url = "https://www.dropbox.com/1/oauth/authorize?oauth_token=" + obj.oauth_token
        cb(e ? null : r.statusCode, obj)
      )
    ,...

如您所见,我已更改代码以使 dbox.js 工作,但未定义 require。如何正确使用require.js

更新。 正如我发现的那样,问题出在主机环境中。 QML 全局空间是恒定的。 Node.js 要求对象存在于空间中(例如 iself)并导入到全局空间中。有一个 project on github 粘合 Node.js 和 QML,但它还没有完成。我提出另一种解决方案:制作一个 C++ 插件以在 js 中运行脚本。该脚本在Node.js 环境中运行,用于将 Dropbox 帐户信息传递给基于 Quick 的应用程序。

【问题讨论】:

【参考方案1】:

使用 Web API 的最佳方法是什么? Dropbox 在这种情况下。

视情况而定。

由于我需要列出所有文件并下载文件,最好的选择是手动使用Dropbox API。

我使用OAuth2 来授权应用程序Token Flaw,因为它很快。

WebView 是应用程序。内置浏览器。一旦将redirect_uri 设置为WebView url 属性值,则表示授权已通过。 access token 与重定向一起返回。

注意。 redirect_uri 必须等于应用程序中设置的redirect_uri AppConsole 在应用程序中。 Dropbox账号。

结果:我没有使用3d partyDropbox JS库,手动发送请求要快得多。

【讨论】:

以上是关于QML 中的 JS 要求的主要内容,如果未能解决你的问题,请参考以下文章

QML中的ComboBox SQL QT 5.10.1

在 QML 中解析 JSON [重复]

QML 中的堆栈布局

QML 中的 Double 现在完全等价于 Real 吗?

C++ 和 QML 中的 QT QML 项

无法访问位于同一目录中的 QML 单例