2013-04-04 56 views
2

本着同樣的精神,以a previous question我問過,我不知道A)如何通過各個數據屬性的服務器擴展和B)如何訪問這些數據從服務器擴展源代碼中的屬性。作爲一個側邊欄(不一定是這個問題的主要目的),是否有可能從服務器擴展返回一個FatFractal對象數組?我在我的客戶端應用程序中使用FatFractal JavaScript SDK。如何將數據屬性傳遞給FatFractal服務器擴展並通過擴展代碼訪問它們?

基本上,我創建一個簡單的搜索工具,其中輸入參數將被傳遞到服務器的擴展,並且服務器擴展將返回匹配的搜索條件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; 

同樣,註釋的部分是那些我需要一些澄清。我相信我已經找到了其餘的實現邏輯。預先感謝任何幫助!

回答

2

爲您的應用JS代碼,你可以通過將數據作爲URL查詢參數:

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

// suitable validation and URL encoding ... 

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

(請注意,您可以使用通常的getArrayFromUri功能太多,但你必須給予充分伸展URI 。

然後在您的擴展在這種情況下`/ FF /轉/ SearchUsers'),你需要首先得到傳入的參數:

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

最後,SE t爲結果:

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

注意,你也可以使用postObjToExtension功能的,那麼,發帖的目的是你的擴展,但可能是矯枉過正了這種情況。