2017-09-25 54 views
0

我有我的网页上有多个产品,要创建一个关联数组持有的产品数量为键和JQuery的元素值,所以我创造了这个接口动态创建一个字符串键和JQuery值关联数组

interface ProductMap<T extends JQuery> { 
    [productNumber: string]: T; 
} 

然后,在我的课,我初始化protected elements: ProductMap<JQuery> = {};,并希望随后的数据来填充它

const products = $(selector); 
if (products.length > 0) { 
    $.each(products, function (index, product) { 
     this.elements[$(product).data('product-number')] = $(product); 
    }); 
} 

不过,我总是得到错误

Uncaught TypeError: Cannot set property '{product-number}' of undefined

究竟如何创建这样一个关联数组?

+0

你为什么不使用地图? –

+0

我读过,它只适用于编译ES6和我们在ES5编译 – Musterknabe

回答

1

this.elements未定义,因为您使用$.each更改了上下文。保持你的实例的引用,以解决这个问题:

const products = $(selector); 
var self = this; 

if (products.length > 0) { 
    $.each(products, function (index, product) { 
     self.elements[$(product).data('product-number')] = $(product); 
    }); 
} 

你也可以使用bind实现这一目标。

+1

谢谢!当来自其他语言时,一切都是独立的上下文很难习惯。完全忘了这一点。谢谢 – Musterknabe

+0

@Musterknabe如果你可以使用''.each(products,(index,product)=> {...})的胖箭头符号'''你可能不需要保存上下文btw。 –

+0

@kevinSpaceyIsKeyserSöze这仍然是ES6。 –