2

与我之前提出的问题类似,我想知道 A)如何将单个数据属性传递给服务器扩展,以及 B)如何从服务器扩展源代码内部访问这些数据属性。作为侧边栏(不一定是这个问题的主要目的),是否可以从服务器扩展返回一组 FatFractal 对象?我在我的客户端应用程序中使用 FatFractal JavaScript SDK。

基本上,我正在创建一个简单的搜索实用程序,其中输入参数将传递给服务器扩展,服务器扩展将返回与搜索条件匹配的 FFUser 对象数组。

FFDL:

CREATE EXTENSION /SearchUsers AS javascript:require('scripts/Search').searchUsers();

应用程序JS代码:

        function findUsers() {
            if(!ff.loggedIn()) {
                alert("You must be logged in to search for users.");
            }
            else {
                var searchCriteria = $("#input-user-search").val();

                // pass 'searchCriteria' to 'SearchUsers' extension
                // acquire handle to 'matchedUsers' returned from 'SearchUsers'

                ...

            }
        }

服务器扩展JS代码:

var ff = require('ffef/FatFractal');

function searchUsers() {

    var matchedUsers; // an array of FFUser objects
    var searchInput; // the search criteria 


    // acquire handle to 'searchCriteria' passed from client app to assign to 'searchInput'

    ...

    // return 'matchedUsers' to client app

}

...

exports.searchUsers = searchUsers;

同样,评论部分是我需要澄清的部分。其余的实现逻辑我相信我已经弄清楚了。提前感谢您的帮助!

4

1 回答 1

2

对于您的应用程序 JS 代码,您可以将数据作为 URL 查询参数传递:

var searchCriteria = $("#input-user-search").val();

// suitable validation and URL encoding ...

ff.getArrayFromExtension("/SeachUsers?search=" + searchCriteria,
    function(result) {
        // success
});

(请注意,您也可以使用通常的getArrayFromUri功能,但在这种情况下,您必须提供 `/ff/ext/SearchUsers' 的完整扩展 URI。)

然后在你的扩展中,你需要先获取传入的参数:

var searchCriteria = ff.getExtensionRequestData().httpParameters['search'];

最后,设置结果:

var r = ff.response();
r.responseCode = 200;
r.result = matchedUsers;

请注意,您也可以使用该postObjToExtension函数,然后将对象发布到您的扩展程序中,但这对于这种情况来说可能是多余的。

于 2013-04-17T23:17:32.367 回答