gpt4 book ai didi

javascript - 合金钛和谷歌云端点

转载 作者:行者123 更新时间:2023-11-30 17:19:59 26 4
gpt4 key购买 nike

我想知道如何(正确的方式)在 Alloy Titanium 应用程序中使用 Google Cloud Endpoint。我想使用 Google 为 API 端点提供的库。

我是 Alloy 和 CommonJS 的新手,因此试图找出正确的方法来做到这一点。

根据我的理解,Alloy 更喜欢(或只允许)通过模块(CommonJS - exports...)包含 javascript。

var module = require('google.js');
google.api.endpoint.execute();

这将是 CommonJS 期望的工作方式。虽然在google javascript library它只是创建一个名为“gapi”的全局变量。

  • 有什么办法可以包含这个文件吗?
  • 有没有办法,我可以创建全局变量?
  • 我应该避免首先创建它们吗?

谢谢!

最佳答案

Google 为 API 端点提供的 client.js 库只能从浏览器运行(在本例中为 Titanium.UI.WebView),不能直接从 Titanium 代码运行,因为它包含 Titanium 中不可用的对象加速器。

此外,在 Alloy Titanium 应用程序中使用 Google Cloud Endpoint 需要在编译时将 js 代码提供给项目,因为 Titanium 使用它来为所需平台生成 native 代码。

回答您的问题:

  • 有什么办法可以包含这个文件吗?

    1. 不,如果您打算将代码作为 Titanium 代码运行,出于上述原因。相反,您可以使用以下代码片段连接到 Google Cloud Endpoint:


    var url = "<a href="https://1-dot-projectid.appspot.com/_ah/api/rpc" rel="noreferrer noopener nofollow">https://1-dot-projectid.appspot.com/_ah/api/rpc</a>";
    var methodName = "testendpoint.listGreetings";
    var apiVersion = "v1";
    callMethod(url, methodName, apiVersion, {
    success : function(responseText)
    {
    //work with the response
    },
    error : function(e) { //onerror do something
    }
    });
    function callMethod(url, methodName, apiVersion, callbacks) {
    var xhr = Titanium.Network.createHTTPClient();
    xhr.onload = function(e) {
    Ti.API.info("received text: " + this.responseText);
    if (typeof callbacks.success === 'function') {
    callbacks.success(this.responseText);
    }
    };
    xhr.onerror = function(e) {
    Ti.API.info(JSON.stringify(e));
    //Ti.API.info(e.responseText);
    if (typeof callbacks.error === 'function') {
    callbacks.error(e);
    }
    };
    xhr.timeout = 5000; /* in milliseconds */
    xhr.open("POST", url, true);
    xhr.setRequestHeader('Content-Type', 'application/json-rpc');
    //xhr.setRequestHeader('Authorization', 'Bearer ' + token);
    var d = [{
    jsonrpc: '2.0',
    method: methodName,
    id: 1,
    apiVersion: apiVersion,
    }];
    Ti.API.info(JSON.stringify(d));
    // Send the request.
    xhr.send(JSON.stringify(d));
    }

    1. 是的,如果您像这样使用嵌入式设备的浏览器(可以在 Web 客户端 GAE 示例中找到)

      webview = Titanium.UI.createWebView({
      width : '100%',
      height : '100%',
      url : url // put your link to the HTML page
      });
      , 以调用您的服务器 HTML 页面,其中应包含:

      script src="https://apis.google.com/js/client.js?onload=init">
  • 有没有办法,我可以创建全局变量?

是的,在app/alloy.js文件中插入全局变量,查看文件中的默认注释:


// This is a great place to do any initialization for your app
// or create any global variables/functions that you'd like to
// make available throughout your app. You can easily make things
// accessible globally by attaching them to the <code>Alloy.Globals</code>
// object. For example:
//
Alloy.Globals.someGlobalFunction = function(){};
Alloy.Globals.someGlobalVariable = "80dp";

  • 我是否应该首先避免创建它们?

我想您正在引用包含用于连接到 GAE enpoind 方法的模块代码的全局变量。这是你的决定,这里是你如何使用它们。

a) 在你的Titanium项目的app/lib文件夹下创建一个名为jsonrpc.js的文件,将以下代码放入其中,并将上面的函数代码移到函数体中:

JSONRPCClient = function () {
};
JSONRPCClient.prototype = {
callMethod : function (url, methodName, apiVersion, callbacks) {
// insert the function body here
}
};
exports.JSONRPCClient = JSONRPCClient;

b) 在 app/alloy.js 文件中定义你的全局变量:

Alloy.Globals.JSONRPCClient = require('jsonrpc').JSONRPCClient;

c) 使用它(例如从你的 Controller js 文件):

var client = new Alloy.Globals.JSONRPCClient();
var url = "https://1-dot-projectid.appspot.com/_ah/api/rpc";
var methodName = "testendpoint.listGreetings";
var apiVersion = "v1";

client.callMethod(url, methodName, apiVersion,
{success: function(result) {
//result handling
Ti.API.info('response result=', JSON.stringify(result));
//alert(JSON.stringify(result));
},
error: function(err) {
Ti.API.info('response out err=', JSON.stringify(err));
//error handling
}
});

关于javascript - 合金钛和谷歌云端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com