0

我正在使用流星创建一个 DApp,其中一个 templateVar 显示一个帐户地址。

使用web3JavaScript 中的函数,我将updateInterface()如下所示的方法定义为 updateInterface()

但是,由于该方法是一个循环,我似乎无法触发里面的事件Template.foo.events。该方法有效,因为我能够alert(res)将结果提醒到屏幕上。

有人能指出我正确的方向吗?干杯

编辑:添加了该template.oncreated函数,并且该函数updateInterface()也放置在oncreated、 助手和事件方法之外。

Template.foo.onCreated(function fooOnCreated() {
    this.account= new ReactiveVar(0);
});

Template.foo.helpers({
    account() {
        var template = Template.instance();
        myContract = web3.eth.contract(ABIArray).at(contractAddress);

        var result = web3.eth.getCoinbase(function(err, res) {
            TemplateVar.set(template, "person", res);
        });
    },
}); 

Template.foo.events({
      // not sure what to place here
});

var account = web3.eth.accounts[0];
var accountInterval = setInterval(function() {
    if (web3.eth.accounts[0] !== account) {
        account = web3.eth.accounts[0];
        updateInterface();
    }
}, 100);

function updateInterface() {
    var template = Template.instance();
    var result = web3.eth.getCoinbase(function(err, res) {
        alert(res);
        TemplateVar.set(template, "account", res);
    });
}

事件的问题在于它需要一个事件,而元掩码检测功能每100 毫秒检测一次帐户更改,我不确定该updateInterface()方法的放置位置。

TemplateVar 指向这里。

<head>
    <body>
        <div id="section">
            {{>foo}}
        </div>
    </body>
</head>

<template name="foo">
    <div id="location">
        <p>Currently logged in as: {{account}} {{TemplateVar.get 
           "account"}} </p>
    </div>
</template>
4

1 回答 1

0

我认为你应该把间隔循环放在里面,onCreated而不是检查account !== web3.eth.accounts[0]你应该检查self.account.get() = web3.eth.accounts[0]

像这样

Template.foo.onCreated(function fooOnCreated() {
  this.account= new ReactiveVar(0);
  this.account.set(web3.eth.accounts[0]);
  var self = this;
  var accountInterval = setInterval(function() {
    if (web3.eth.accounts[0] !== self.account.get()) {
      self.account.set(web3.eth.accounts[0]);
    }
  }, 500);
});

并且因为它是一个ReactiveVar你不必调用更新函数。模板应在其中使用值时自动更新。

我没有测试过,但我认为它应该像这样工作

于 2019-01-15T22:35:29.420 回答