JS需要QML

时间:2015-04-25 13:57:02

标签: javascript qt qml qtquick2

我在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 个答案:

答案 0 :(得分:0)

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

取决于。

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

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

WebView是该应用。内置浏览器。将redirect_uri设置为WebView url属性值后,即表示授权已通过。随重定向返回access token

注意。 redirect_uri必须等于应用中应用redirect_uri中设置的AppConsoleDropbox帐户。

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