流星js |通过帮助器显示视图中的Json

Meteor js | Display Json in view via helper

本文关键字:视图 显示 Json 帮助 js 流星      更新时间:2023-09-26

我正在努力解决使用Meteor JS的问题。

我调用一个api,它返回一个Json数组,看起来像这个url返回的数组(我没有把整个数组放在这里,因为大小的原因):https://blockchain.info/address/12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX?format=json&offset=0

我把它叫做服务器端:

if (Meteor.isServer) {
    Meteor.methods({
       getWalletPreviousTx: function() {
       var url = "https://blockchain.info/address/12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX?format=json&offset=0";
       var result = Meteor.http.get(url);
       if(result.statusCode==200) {
            var tx = JSON.parse(result.content);
            return tx;
       } else {
            console.log("Response issue: ", result.statusCode);
            var errorJson = JSON.parse(result.content);
            throwError("Couldn't fetch wallet balance from Blockchain, try again later !");
        }
      }
    });
}

和我检索它到我的视图通过一个助手在一个特定的模板:

Template.wallet.helpers({
    addrTxs: function () {
      Meteor.call('getWalletPreviousTx', function(err, tx) {
         console.log(tx);
         return [tx];
      });
    }
});

helper中的console.log实际上记录了我的Json数组,这意味着它可以访问它。现在我挣扎的部分是检索这个Json到我的视图,我已经尝试了很多方法,没有一个工作,实际上我有这个在我的视图:

<template name="wallet">
    <table>
            {{#each addrTxs}}
                <ul>
                    {{> addrTx}}
                </ul>
            {{/each }}
     </table>
</template>

我想显示的Json部分是每个事务的"addr"answers"value":

"inputs":[
  {
     "sequence":4294967295,
     "prev_out":{
        "spent":true,
        "tx_index":97744124,
        "type":0,
        "addr":"1AWAsn8rhT555RmbMDXXqzrCscPJ5is5ja",
        "value":50000,
        "n":0,
        "script":"76a914683d704735fd591ba9f9aebef27c6ef00cbd857188ac"
     }
  }
]

事实是,我从来没有设法显示任何从这个Json数组在我的视图,甚至把它直接在我的视图不显示任何东西:

{{addrTxs}}

我做错了什么?有人能帮我吗?

感谢您的阅读。

----------------------- 编辑 ---------------------

我认为问题更多的是我的助手和模板在api调用完成之前加载(因为console.log出现在我的控制台中,就像我的页面渲染后3秒)。我怎么能让我的助手等待,直到api调用完成之前渲染它在视图中?我用的是铁的。

我试图在我的路由上添加一个waitOn动作,以便等待,直到我的api调用完成:

Router.route('/wallet', {
  name: 'wallet',
  template: 'wallet',
  loadingTemplate: 'loading',
  waitOn: function () {
    Meteor.call('getWalletPreviousTx', function(error, result) {
    if(!error) {
       Ready.set(result)
    }
  });
  return [
    function () { return Ready.get(); }
  ];
 },
 action: function () {
    if (this.ready())
      this.render();
    else
      this.render('loading');
 }
});

上面的代码与waitOn动作似乎工作(我没有错误),但我不知道如何显示在我的视图中的具体结果:

if(!error) {
   Ready.set(result)
}

事务包含在tx中。Txs ,遍历它。

Template.wallet.helpers({
    addrTxs: function () {
      Meteor.call('getWalletPreviousTx', function(err, tx) {
         console.log(tx);
         return tx.txs;
      });
    }
});

你是对的,你需要使用会话变量与异步调用。

首先,调用创建的方法:

Template.wallet.created = function () {
  Meteor.call('getWalletPreviousTx', function(err, tx) {
     console.log(tx.txs);
     Session.set('tx', tx.txs);
  });
};

Helper应该是这样的:

Template.wallet.helpers({
  addrTxs: function () {
    return Session.get('tx');
  }
});