在 GopherJS 中访问 $(this)

Accessing $(this) in GopherJS

作为练习,我将 single page application 从 JavaScript 转换为 GopherJS。

在JS代码中,出现如下:

var list = $('.all-products .products-list');
list.find('li').on('click', function (e) {
  e.preventDefault();
  var productIndex = $(this).data('index');
  window.location.hash = 'product/' + productIndex;
})

在我的 GopherJS 转换中,我有以下内容:

list := jquery.NewJQuery(".all-products .products-list")
list.Find("li").On("click", func(e jquery.Event) {
e.PreventDefault()
// productIndex := jquery.NewJQuery(e.Target).Data("index").(float64)
// dom.GetWindow().Location().Hash = "product/" + productIndex
})

但我正在努力弄清楚如何翻译 $(this)jquery.NewJQuery(e.Target)好像不是return,li,而是li里面的一个div

我的理解是 $(this) 在一个函数中 return 的 this 作用域为外部 jQuery 项 (li)。

对于 $(this),您需要使用 js.MakeFunc 来访问 this 对象。类似于

list.Find("li").On("click", js.MakeFunc(func(this *js.Object, args []*js.Object) interface{} {
    e := dom.WrapEvent(args[0])
    e.PreventDefault()
    productIndex := jquery.NewJQuery(this).Data("index").(float64)
    dom.GetWindow().Location().Hash = "product/" + productIndex
    return nil
}))