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 party
Dropbox JS
库,手动发送请求要快得多。
【讨论】:
以上是关于QML 中的 JS 要求的主要内容,如果未能解决你的问题,请参考以下文章