如何显示 Meteor.HTTP.Get 的结果
How to display result from Meteor.HTTP.Get
编辑:现在可以使用了。诀窍是将 HTTP.get
移动到服务器端并使用 simple:reactive-method
包从方法中获取结果。
我需要一些帮助来弄清楚如何显示 Meteor.HTTP.Get 的结果。文档很粗略,这里没有与我的案例相关的主题。
我正在 searching Foursquare 寻找您周围的当地农民和市场。然后在地图中显示结果(还没有地图)。这是代码:
起始页:
<template name="locator">
<a class="button" href="{{pathFor route='locatorMap' query='group=farmers'}}">Farmers</a>
<a class="button" href="{{pathFor route='locatorMap' query='group=markets'}}">Markets</a>
</template>
即将成为地图页面。 编辑:2015 年 3 月 31 日
<template name="locatorMap">
<div class="list">
{{#each venues}}
<p>{{name}}. {{location.lat}}, {{location.lng}}</p>
{{/each}}
</div>
</template>
路由(lib/router.js)
Router.route('/locator', {name: 'locator'});
Router.route('/locator/map', {name: 'locatorMap'});
助手 (client/locator/locator.js)。 编辑:2015 年 3 月 31 日
// A static list of venue categories
Foursquare.categoryId = { ... };
Template.locatorMap.helpers({
venues: function() {
var search_group = Router.current().params.query.group;
var search_categories = Foursquare.categoryId[search_group].join(',');
var search_location = Geolocation.latLng();
if (search_location) {
// using simple:reactive-method
return ReactiveMethod.call('FoursquareSearch', search_categories, search_location);
} else {
throw new Meteor.Error("No Location", "Failed to get ...");
}
}
});
方法(server/methods/foursquare.js)。 编辑:2015 年 3 月 31 日
Meteor.methods({
FoursquareSearch: function(categories, location) {
check(categories, String);
check(location, Object);
try {
var search_result = HTTP.call(
'GET', 'https://api.foursquare.com/v2/venues/search?',
{
timeout: 5000,
params: { ... }
}
);
return search_result.data.response.venues;
} catch (_error) {
throw new Meteor.Error("No Result", "Failed to fetch ...");
}
}
});
我可以在控制台上看到数据。但我只是不确定如何将它传递给模板助手。如果你们需要更多信息,请告诉我。
感谢任何帮助。谢谢!
问题真的只是:"How do I call a method from a helper?",答案是 and here。但是,为了使这些解决方案起作用,您需要您的方法 return 一个值,而不是进行异步 HTTP 调用(returns undefined
)。阻力最小的路径是仅在服务器上定义 FoursquareSearch
方法(将其放在 /server
目录下)并使用同步方法调用。例如:
Meteor.methods({
FoursquareSearch: function(cat) {
check(cat, String);
var search_location = Geolocation.latLng();
if (search_location) {
try {
// fill in the blanks here with params, timeout, etc.
var result = HTTP.get(...);
return result.data.response;
} catch (_error) {
throw new Meteor.Error("No Result", "Failed to fetch...");
}
}
}
});
编辑:现在可以使用了。诀窍是将 HTTP.get
移动到服务器端并使用 simple:reactive-method
包从方法中获取结果。
我需要一些帮助来弄清楚如何显示 Meteor.HTTP.Get 的结果。文档很粗略,这里没有与我的案例相关的主题。
我正在 searching Foursquare 寻找您周围的当地农民和市场。然后在地图中显示结果(还没有地图)。这是代码:
起始页:
<template name="locator">
<a class="button" href="{{pathFor route='locatorMap' query='group=farmers'}}">Farmers</a>
<a class="button" href="{{pathFor route='locatorMap' query='group=markets'}}">Markets</a>
</template>
即将成为地图页面。 编辑:2015 年 3 月 31 日
<template name="locatorMap">
<div class="list">
{{#each venues}}
<p>{{name}}. {{location.lat}}, {{location.lng}}</p>
{{/each}}
</div>
</template>
路由(lib/router.js)
Router.route('/locator', {name: 'locator'});
Router.route('/locator/map', {name: 'locatorMap'});
助手 (client/locator/locator.js)。 编辑:2015 年 3 月 31 日
// A static list of venue categories
Foursquare.categoryId = { ... };
Template.locatorMap.helpers({
venues: function() {
var search_group = Router.current().params.query.group;
var search_categories = Foursquare.categoryId[search_group].join(',');
var search_location = Geolocation.latLng();
if (search_location) {
// using simple:reactive-method
return ReactiveMethod.call('FoursquareSearch', search_categories, search_location);
} else {
throw new Meteor.Error("No Location", "Failed to get ...");
}
}
});
方法(server/methods/foursquare.js)。 编辑:2015 年 3 月 31 日
Meteor.methods({
FoursquareSearch: function(categories, location) {
check(categories, String);
check(location, Object);
try {
var search_result = HTTP.call(
'GET', 'https://api.foursquare.com/v2/venues/search?',
{
timeout: 5000,
params: { ... }
}
);
return search_result.data.response.venues;
} catch (_error) {
throw new Meteor.Error("No Result", "Failed to fetch ...");
}
}
});
我可以在控制台上看到数据。但我只是不确定如何将它传递给模板助手。如果你们需要更多信息,请告诉我。
感谢任何帮助。谢谢!
问题真的只是:"How do I call a method from a helper?",答案是undefined
)。阻力最小的路径是仅在服务器上定义 FoursquareSearch
方法(将其放在 /server
目录下)并使用同步方法调用。例如:
Meteor.methods({
FoursquareSearch: function(cat) {
check(cat, String);
var search_location = Geolocation.latLng();
if (search_location) {
try {
// fill in the blanks here with params, timeout, etc.
var result = HTTP.get(...);
return result.data.response;
} catch (_error) {
throw new Meteor.Error("No Result", "Failed to fetch...");
}
}
}
});