Мой код JavaScript не будет подключаться к моему HTML-коду (он просто не отображается на моем HTML-сайте) - PullRequest
0 голосов
/ 09 декабря 2018

Сначала Спасибо, что нашли время и прочитали это:

Я уже некоторое время работаю над проблемой.Я работаю над созданием своего собственного токена / криптовалюты в сети ethereum, используя это обучающее видео.Несколько вещей, которые вы должны знать:

  • Я использую Ganache в качестве локального хоста
  • Я использую компьютер Mac
  • Я использую терминал для запуска моего HTMLвеб-сайт с кодом npm run dev
  • Я использую атом, чтобы написать весь мой код

Теперь вот код JavaScript, с которым я получаю сообщение об ошибке.В частности, там, где написано App.contracts.CinoCoinSale.deployed().then(function(instance), что-либо под этой функцией не работает.Даже когда я console.log, он появляется в моей консоли.Это действительно странно, и я не знаю, что не так

App = {
  web3Provider: null,
  contracts: {},
  account: '0x0',
  loading: false,
  tokenPrice: 1000000000000000,
  tokensSold: 0,
  tokensAvailable: 750000,

  init: function() {
    console.log("App initialized...")
    return App.initWeb3();
  },

  initWeb3: function() {
    if (typeof web3 !== 'undefined') {
      // If a web3 instance is already provided by Meta Mask.
      App.web3Provider = web3.currentProvider;
      web3 = new Web3(web3.currentProvider);
    } else {
      // Specify default instance if no web3 instance provided
      App.web3Provider = new Web3.providers.HttpProvider('http://localhost:7545');
      web3 = new Web3(App.web3Provider);
    }
    return App.initContracts();
  },

  initContracts: function() {
    $.getJSON("CinoCoinSale.json", function(cinoCoinSale) {
      App.contracts.CinoCoinSale = TruffleContract(cinoCoinSale);
      App.contracts.CinoCoinSale.setProvider(App.web3Provider);
      App.contracts.CinoCoinSale.deployed().then(function(cinoCoinSale) {
        console.log("Cino Coin Sale Address:", cinoCoinSale.address);
      });
    }).done(function() {
      $.getJSON("CinoCoin.json", function(cinoCoin) {
        App.contracts.CinoCoin = TruffleContract(cinoCoin);
        App.contracts.CinoCoin.setProvider(App.web3Provider);
        App.contracts.CinoCoin.deployed().then(function(cinoCoin) {
          console.log("Cino Coin Address:", cinoCoin.address);
        });
        return App.render();
      });
    })
  },

  render: function() {
    if (App.loading) {
      return;
    }
    App.loading = true;

    var loader  = $('#loader');
    var content = $('#content');

    loader.show();
    content.hide();

    // Load account data
    web3.eth.getCoinbase(function(err, account) {
      if(err === null) {
        App.account = account;
        $('#accountAddress').html("Your Account: " + account);
      }
    })

    // Load token sale contract
    App.contracts.CinoCoinSale.deployed().then(function(instance) {
      cinoCoinSaleInstance = instance;
      return cinoCoinSaleInstance.tokenPrice();
    }).then(function(tokenPrice) {
      App.tokenPrice = tokenPrice;
      $('.token-price').html(web3.fromWei(App.tokenPrice, "ether").toNumber());
      return cinoCoinSaleInstance.tokensSold();
    }).then(function(tokensSold) {
      App.tokensSold = tokensSold.toNumber();
      $('.tokens-sold').html(App.tokensSold);
      $('.tokens-available').html(App.tokensAvailable);

      var progressPercent = (Math.ceil(App.tokensSold) / App.tokensAvailable) * 100;
     $('#progress').css('width', progressPercent + '%');

     // Load token contract
     App.contracts.CinoCoin.deployed().then(function(instance) {
       cinoCoinInstance = instance;
       return cinoCoinInstance.balanceOf(App.account);
     }).then(function(balance) {
       $('.cino-balance').html(balance.toNumber());
     })
   });

   App.loading = false;
   loader.hide();
   content.show();
  }
 },

 $(function() {
   $(window).load(function() {
     App.init();
   })
 });

Тогда вот HTML-код, который я использую для запуска своего веб-сайта на локальном сервере.Веб-сайт выглядит действительно хорошо и работает, за исключением одной вещи: часть, которая не появляется, и у меня возникла проблема, это вставка значений из предыдущего кода.Это может сбивать с толку, так что вот пример: для фрагмента кода <p><span class="tokens-sold"></span> / <span class="tokens-available"></span> tokens sold</p> должны быть вставлены значения для части class="tokens-sold", а class="tokens-available" эти значения должны быть вставлены из файла Javascript, я думаю, но он не работает ипоэтому не появляется на сайте.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Cino Coin ICO Sale</title>
    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>
    <div class="container" style="width: 650px;">
      <div class="row">
        <div class="col-lg-12">
            <h1 class="text-center">CINO COIN ICO SALE</h1>
            <hr/>
            <br/>
        </div>
        <div id="loader">
          <p class="text-center">Loading...</p>
        </div>
        <div id="content" class="text-center" style="display: none;">
          <p>
            Introducing "Cino Coin" (CC)!
            Token price is <span class="token-price"></span> Ether. You currently have <span class="dapp-balance"></span>&nbsp;CC's.
          </p>
          <br/>
          <form onSubmit="App.buyTokens(); return false;" role="form">
            <div class="form-group">
              <div class="input-group">
                <input id="numberOfTokens" class="form-control input-lg" type="number" name="number" value="1" min="1" pattern="[0-9]">
                </input>
                <span class="input-group-btn">
                  <button type="submit" class="btn btn-primary btn-lg">Buy Tokens</button>
                </span>
              </div>
            </div>
          </form>
          <br>
           <div class="progress">
              <div id="progress" class="progress-bar progress-bar-striped active" aria-valuemin="0" aria-valuemax="100">
              </div>
            </div>
          <p><span class="tokens-sold"></span> / <span class="tokens-available"></span> tokens sold</p>
          <hr>
          <p id="accountAddress"></p>
        </div>
      </div>
    </div>
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"> .</script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/web3.min.js"></script>
    <script src="js/truffle-contract.min.js"></script>
    <script src="js/app.js"></script>
  </body>
</html>

Я был бы очень признателен, если бы решение было найдено.Если вам нужно больше подробностей о том, в чем проблема, или вы не понимаете проблему, просто скажите, и я попытаюсь объяснить это по-другому.

Кроме того, здесь - этовидео, которое я использую.Я застрял во время 11:48, где указана цена токена.Я закончил остальную часть серии видео, и мой код работал до сих пор.

Еще раз большое спасибо, я действительно ценю это:)

Вот папка проекта

Это снимок папки

Редактировать

Я провел еще несколько исследований и обнаружил, что что-нибудьпод App.contracts.CinoCoinSale.deployed().then(function(instance) { не работает.Даже когда я поставлю console.log("hi");, он не будет распечатываться на консоли.Я до сих пор не знаю, как решить эту проблему, но, возможно, это поможет.Это как игнорирование этой функции по какой-то причине

1 Ответ

0 голосов
/ 11 декабря 2018

Проверьте, что находится под App.contracts, возможно, оно не было загружено должным образом.Нет никакого способа, которым это не работает с доступным объектом контрактов.В худшем случае он должен был распечатать простую консоль, которую вы пытались.Попробуйте console.log(App.contracts);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...