首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将rest返回的结果设置为Meteor中的模板变量

将rest返回的结果设置为Meteor中的模板变量
EN

Stack Overflow用户
提问于 2014-01-04 06:12:18
回答 1查看 1.1K关注 0票数 1

我正在学习如何使用Meteor,我正在尝试连接到google并使用meteor.http.get.The返回json,下面的代码工作得很好,我可以设置与返回的json相同的模板变量测试并查看它(我现在想将它用于学习目的):

代码语言:javascript
复制
if (Meteor.isServer) {
    Meteor.methods({
        getGoogleMaps: function () {
            this.unblock();
            return Meteor.http.call("GET", "http://maps.googleapis.com/maps/api/geocode/json",
                {params:{address:"8-10 Broadway, London SW1H 0BG,United Kingdom",
                    sensor:false}});
        }
    });
}

if (Meteor.isClient) {
    Template.main.test=function(){ return Session.get("response");}
    Meteor.call("getGoogleMaps", function(error, results) {
        Session.set("response", results.content); 
   });
}

但是,将返回给测试模板变量的json分配的下列方法不起作用:

代码语言:javascript
复制
if (Meteor.isClient) {
    var response;

    Meteor.call("getResponses", function(error, results) {
            response= results.content;         
    });  

   Template.main.test=function(){ return response;}
}

这也不起作用:

代码语言:javascript
复制
if (Meteor.isClient) {
    Meteor.call("getResponses", function(error, results) {
            Template.main.test= results.content;        
    });  
}

为什么最后两种方法不起作用?从rest返回的结果中设置模板变量最合适的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-05 14:06:26

第二个方法设置值,但是当从服务器接收到响应时,客户端已经呈现了模板,因此您看不到结果。当开始使用异步javascript时,这种时间问题是一个常见的问题,它是Meteor的反应性如此吸引人的主要原因之一。

第三种方法与第二种方法具有相同的定时问题,但它也将模板助手设置为非函数值,因此无效。

由于Meteor的反应性,第一种方法的工作方式与您预期的一样。这一行:

代码语言:javascript
复制
Template.main.test=function(){ return Session.get("response");}

...registers依赖于Session.get(“响应”)。当最终从服务器接收到响应时,对Session.set(' response ')的调用将触发对所有依赖项的重新计算,因此模板将再次以接收到的值呈现。

通过这样的操作,您可以更清楚地看到这一点:

代码语言:javascript
复制
if (Meteor.isClient) {

  Template.main.rendered = function () {
    console.log('[main] rendered');
  };

  Template.main.helpers({
    test: function () { 
      console.log("[main] 'test' helper executed");
      return Session.get("response");
    }
  });

  Meteor.call("getGoogleMaps", function(error, results) {
    console.log("[main] response received");
    Session.set("response", results.content); 
  });
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20917660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档