2014-09-10 29 views
0

我正在嘗試對wordpress rest API進行API調用。從控制檯工作調用如下:Meteor.call()將js對象格式化爲正確的休息查詢

http://dev.thomastraum.com/wp-json/posts?type=tt_works&filter[work_categories]= all&filter[posts_per_page]=1 

從流星「手寫」工作調用如下:

return Meteor.http.call("GET", Settings.wpdomain + "/wp-json/posts", {params: {'type':'tt_works','filter[work_categories]':'all','filter[posts_per_page]':'1'}}); 

現在的問題是,我怎麼能傳遞JavaScript對象的流星電話,他們最終會採取正確的格式。對我來說,上面的調用看起來像他們應該這樣表示:

ArchiveQuery = { 
type:'tt_works', 
filter:{ 
    work_categories:'all', 
    posts_per_page:1 
} 
}; 

,但如果我通過它

return Meteor.http.call("GET", Settings.wpdomain + "/wp-json/posts", {params:ArchiveQuery); 

它返回我的tt_works類型參數的所有帖子,並忽略了所有的休息查詢。我試過EJSON.stringify(ArchiveQuery),但是它的格式不同,{}

回答

1

您需要的查詢格式看起來並不常見。我認爲最簡單的解決方案將自己格式化您的對象:

var fillQuery = function(query, prefix, object) { 
    _.each(object, function(val, key) { 
    var k = (prefix) ? prefix + '[' + key + ']' : key; 
    if(_.isObject(val)) { 
     fillQuery(query, k, val); 
    } else { 
     query[k] = '' + val; 
    } 
    }); 
    return query; 
}; 

var objectToQuery = function(object) { 
    return fillQuery({}, null, object); 
}; 

請參閱here在行動。

+0

謝謝!我正在考慮寫一個功能來做到這一點,但你的看起來比我想象的要好得多。 – 2014-09-11 16:14:58