github.com/vugu/vugu@v0.3.5/vugufmt/testdata/bad/badgo.vugu (about) 1 <div class="demo-comp"> 2 <div vg-if='data.isLoading'>Loading...</div> 3 <div vg-if='len(data.bpi.BPI) > 0'> 4 <div>Updated: <span vg-html='data.bpi.Time.Updated'></span></div> 5 <ul> 6 <li vg-for='data.bpi.BPI'> 7 <span vg-html='key'></span> <span vg-html='fmt.Sprint(value.Symbol, value.RateFloat)'></span> 8 </li> 9 </ul> 10 </div> 11 <button @click="data.HandleClick(event)">Fetch Bitcoin Price Index</button> 12 </div> 13 14 <script type="application/x-go"> 15 import "encoding/json" 16 import "net/http" 17 import "log" 18 19 type RootData struct { 20 bpi bpi 21 isLoading bool 22 } 23 24 type bpi struct { 25 Time struct { Updated string `json:"updated"` } `json:"time"` 26 BPI map[string]struct { Code string `json:"code"`; Symbol string `json:"symbol"`; RateFloat float64 `json:"rate_float"` } `json:"bpi"` 27 } 28 29 func (data *RootData) HandleClick(event vugu.DOMEvent) { 30 31 data.bpi = bpi{} 32 33 go func(ee vugu.EventEnv) { 34 35 ee.Lock() 36 data.isLoading = true 37 ee.UnlockRender() 38 39 res, err := http.Get("https://api.coindesk.com/v1/bpi/currentprice.json") 40 if err != nil { 41 log.Printf("Error fetch()ing: %v", err) 42 return 43 } 44 defer res.Body.Close() 45 46 var newb bpi broken! 47 err = json.NewDecoder(res.Body).Decode(&newb) 48 if err != nil { 49 log.Printf("Error JSON decoding: %v", err) 50 return 51 } 52 53 ee.Lock() 54 defer ee.UnlockRender() 55 data.bpi = newb 56 data.isLoading = false 57 58 }(event.EventEnv()) 59 } 60 61 </script>