Wie rufe ich eine Funktion in Javascript auf, um eine Solidity-Funktion mit Meteor und TemplateVar aufzurufen

Ich habe ein sehr einfaches Frontend erstellt, um den Namen des Kreditnehmers anzuzeigen. Ich habe den Contract Borrower auf Rinkeby eingesetzt. Ich kann die Anwendung ausführen, wenn ich mit dem folgenden .js-Code auf die Variable borgerName zugreife:

import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';

import './main.html';

contractAddress = "0x7f3bdc7f93b0dfc1939669d35922d65bbc5953e4"

ABIArray = [
    {
        "constant": true,
        "inputs": [],
        "name": "getThisBalance",
        "outputs": [
            {
                "name": "",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "getName",
        "outputs": [
            {
                "name": "",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "borrowerName",
        "outputs": [
            {
                "name": "",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "name": "_borrowerName",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "constructor"
    }
]

data = "0x6060604052341561000f57600080fd5b604051610442380380610442833981016040528080518201919050508060009080519060200190610041929190610048565b50506100ed565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061008957805160ff19168380011785556100b7565b828001600101855582156100b7579182015b828111156100b657825182559160200191906001019061009b565b5b5090506100c491906100c8565b5090565b6100ea91905b808211156100e65760008160009055506001016100ce565b5090565b90565b610346806100fc6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806317d7de7c1461005c5780633655394a146100ea5780638e8cf4a814610178575b600080fd5b341561006757600080fd5b61006f6101a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100af578082015181840152602081019050610094565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156100f557600080fd5b6100fd610249565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013d578082015181840152602081019050610122565b50505050905090810190601f16801561016a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018357600080fd5b61018b6102e7565b6040518082815260200191505060405180910390f35b6101a9610306565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561023f5780601f106102145761010080835404028352916020019161023f565b820191906000526020600020905b81548152906001019060200180831161022257829003601f168201915b5050505050905090565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102df5780601f106102b4576101008083540402835291602001916102df565b820191906000526020600020905b8154815290600101906020018083116102c257829003601f168201915b505050505081565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6020604051908101604052806000815250905600a165627a7a723058204f28f438e6dd5084db8ce773fbe5f379aa7338d56db472581f4b398ef1996e3d00290000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a426f72726f776572203100000000000000000000000000000000000000000000"

Template.hello.onCreated(function helloOnCreated() {
  // counter starts at 0
  this.displayName = new ReactiveVar(0);
});


Template.hello.helpers({
  displayName() {
    var template = Template.instance();

    myContract = web3.eth.contract(ABIArray).at(contractAddress);

    myContract.borrowerName(function(err, res){
        TemplateVar.set(template, "displayName", res)
    });
  },
});

aber wenn ich die Variable borgerName durch die Funktion getName ersetze, schlägt sie fehl. Der HTML-Code lautet wie folgt:

<template name="hello">
  <button>Click Me</button>
  <p>Borrower Name {{displayName}} {{TemplateVar.get "displayName"}} </p>
</template>

Ich nehme an, es ist etwas Einfaches, das ich vermisse, aber ich würde mich über jede Hilfe freuen. Danke.

Antworten (1)

Also habe ich es gelöst. Eigentlich ganz einfach, nachdem ich es herausgefunden hatte ... Ich musste nur den Java-Script-Hilfscode wie folgt ändern:

Template.hello.helpers({
  displayName() {
    var template = Template.instance();

    myContract = web3.eth.contract(ABIArray).at(contractAddress);

    myContract.getName(function(err, res){
        TemplateVar.set(template, "getName", res)
    });
  },
});

und den HTML-Code wie folgt:

<template name="hello">
  <button>Click Me</button>
  <p>The name of the borrower is {{displayName}} {{TemplateVar.get "getName"}} </p>
</template>

Das Problem war mit den Get- und Set-Funktionen. Ich musste auf die Funktion getName verweisen.