2014-09-10 28 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