#javascript #jquery #twitter-bootstrap #web3js
Вопрос:
У меня здесь есть этот код, который дает мне последнюю пару из смарт-контракта:
document.getElementById("latestPairs").innerHTML = `<table class="table table-dark table-striped table-hover" id="latest"></table>`;
const table = document.getElementById("latest");
const rowHeader = `<thead>
<tr>
<th>Token0</th>
<th>Token1</th>
<th>Pair</th>
</tr>
</thead>`
table.innerHTML = rowHeader;
pcsfactoryC.events.PairCreated({fromBlock:'latest'})
.on('data', async function(event){
//console.log(event.returnValues);
// Do something here
let pairs = event.returnValues
let token0 = event.returnValues['token0'];
let token1 = event.returnValues['token1'];
let getPair = event.returnValues['pair'];
console.log(token0 " " token1);
add_row("latest", [event.returnValues['token0'], event.returnValues['token1'], event.returnValues['pair']]);
})
.on('error', console.error);
Это работает в консоли, как и ожидалось, однако строки не добавляются в таблицу, и я получаю следующую ошибку:
Uncaught (in promise) ReferenceError: add_row is not defined
Как я могу это исправить и создать динамическую таблицу для своих данных?
Комментарии:
1.
add_row()
это не встроенная функция. Вы должны определить это. Если вы определили его, не могли бы вы, пожалуйста, включить его и обновить свой вопрос?2. похоже, я его не определил, эта 1 строка кода должна быть функцией add_row
3. не могли бы вы, пожалуйста, сказать мне, как я могу это исправить, потому что я не нахожу на YouTube достойных руководств о том, как это сделать с помощью динамической таблицы
Ответ №1:
Вы должны создать свою собственную функцию add_row, так как она не является встроенной функцией в js
Кроме того, функция асинхронности кажется ненужной, так как вы не используете await.
Ответ №2:
Вы можете просто добавить innerHTML в таблицу. Оберните каждую строку <tr>
и каждый столбец <td>
.
function add_row(id, token0, token1, pair){
var table = document.getElementById(id);
const rowdata = "<tr><td>" token0 "</td><td>" token1 "</td><td>" pair "</td></tr>";
table.innerHTML = rowdata;
}
add_row v2 (Вставить сверху, а не снизу)
function add_row(id, token0, token1, pair){
var table = document.getElementById(id);
var thead = document.querySelector('#' id ' thead').innerHTML;
const firstrowdata = "<tbody><tr><td>" token0 "</td><td>" token1 "</td><td>" pair "</td></tr></tbody>";
const rowdata = "<tr><td>" token0 "</td><td>" token1 "</td><td>" pair "</td></tr>";
if(table.rows.length == 1)table.innerHTML = firstrowdata;
else{
var tbody = document.querySelector('#' id ' tbody').innerHTML;
table.innerHTML = "<thead>" thead "</thead>" "<tbody>" rowdata tbody "</tbody>";
}
}
Если вы хотите проверить это, вам нужно изменить способ вызова add_row()
:
/* Removed outer [ ] after ("latest", */
add_row("latest", event.returnValues['token0'], event.returnValues['token1'], event.returnValues['pair']);
Комментарии:
1. отлично, это работает, у меня седые волосы, я пытаюсь заставить это работать, чувак, спасибо
2. единственное, что мне не нравится, так это то, что самые новые записи не добавляются в верхнюю строку, а добавляются — как я могу это изменить?
3. Я добавил функцию вставки строки сверху, а не снизу.
4. Надеюсь, это помогло. Дайте мне знать, если у вас все еще есть какие-либо проблемы 🙂