App = {
web3Provider: null,
contracts: {},
init: async function() {
// Load pets.
$.getJSON('../pets.json', function(data) {
var petsRow = $('#petsRow');
var petTemplate = $('#petTemplate');
for (i = 0; i < data.length; i ++) {
petTemplate.find('.panel-title').text(data[i].name);
petTemplate.find('img').attr('src', data[i].picture);
petTemplate.find('.pet-breed').text(data[i].breed);
petTemplate.find('.pet-age').text(data[i].age);
petTemplate.find('.pet-location').text(data[i].location);
petTemplate.find('.btn-adopt').attr('data-id', data[i].id);
petsRow.append(petTemplate.html());
}
});
return await App.initWeb3();
},
initWeb3: async function() {
if (typeof web3 !== 'undefined') {
App.web3Provider = web3.currentProvider;
} else {
App.web3Provider = new Web3.providers.HttpProvider("http://127.0.0.1:7545");
}
web3 = new Web3(App.web3Provider);
/*
* Replace me...
*/
return App.initContract();
},
initContract: function() {
$.getJSON('../Adoption.json', function(data) {
var AdoptionArtifact = data;
App.contracts.Adoption = TruffleContract(AdoptionArtifact);
App.contracts.Adoption.setProvider(App.web3Provider);
return App.markAdopted();
});
return App.bindEvents();
},
bindEvents: function() {
$(document).on('click', '.btn-adopt', App.handleAdopt);
},
// 标记领养状态
markAdopted: function(adopters, account) {
var apotionInstance;
App.contracts.Adoption.deployed().then(function(instance) {
apotionInstance = instance;
return apotionInstance.getAdopters.call();
}).then(function(adopters){
for(i=0; i<adopters.length; i++){
if(adopters[i] !== '0x00000000000000000000000000000000'){
$('.panel-pet').eq(i).find('button').text('Success').attr('disabled', true);
}
}
}).catch(function(err){
console.log(err.message);
})
},
handleAdopt: function(event) {
event.preventDefault();
var apotionInstance;
var petId = parseInt($(event.target).data('id'));
web3.eth.getAccounts(function(error, accounts){
var account = accounts[0];
App.contracts.Adoption.deployed().then(function(instance){
apotionInstance = instance;
return apotionInstance.adopt(petId, {from: account});
}).then(function(result){
return App.markAdopted();
}).catch(function(err){
console.log(err.message);
})
});
}
};
$(function() {
$(window).load(function() {
App.init();
});
});
app.js