Как получить доступ к свойствам элемента DOM из Go WebAssembly? - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь расширить пример "Hello WebAssembly" с https://github.com/golang/go/wiki/WebAssembly. Как указано, пример просто выводит сообщение на консоль.Я хотел добавить некоторый код, используя syscall/js для замены содержимого элемента body.

Попытка, приведенная ниже, не удалась:

package main

import (
    "fmt"

    "syscall/js"
)

func main() {
    fmt.Println("Hello, WebAssembly!") // original example
    // I added
    doc := js.Global().Get("document")
    body := doc.Call("getElementById", "thebody")
    body.innerHTML = "Dynamic Content"
}

Когда я пытаюсь собрать с $ env GOOS=js GOARCH=wasm go build -o main.wasm, я получаю: ./wasm.go:14:6: body.innerHTML undefined (type js.Value has no field or method innerHTML)

Не удивительно, когда вы об этом думаете, но я не вижу примера в документе по адресу https://godoc.org/syscall/js, который объясняет, как получить и установить свойства элемента.

1 Ответ

0 голосов
/ 24 октября 2018

Чтобы получить значение какого-либо свойства некоторого объекта JavaScript, используйте метод Value.Get() (вы фактически уже использовали его, когда обращались к объекту документа, вызывая js.Global().Get("document")).Аналогично, чтобы установить значение свойства, используйте Value.Set().

Имя свойства, значение которого для получения / установки является просто значением Go string, "innerHTML"в твоем случае.Устанавливаемое значение может представлять собой множество значений Go (например, string, целые числа, числа с плавающей запятой, bool, срезы, карты и т. Д.), Функция js.ValueOf() используется для полученияjs.Value(), который будет установлен в конечном итоге.В вашем случае вы можете просто использовать значение Go string "Dynamic Content".

doc := js.Global().Get("document")
body := doc.Call("getElementById", "thebody")
body.Set("innerHTML", "Dynamic Content")
...