我正在建立一个小型的联署材料方法,将 data-/code> attrs附在链接上,将事件绑在链接上,并将
data-/code> 值发送给第三党JS Anallytics API。
<a href="#" class="js-analytics-proxy" data-trackme= {"obj": this, "rmethod": "track", "partial-path": "/foo/bar" }
在一份联署材料中
$( js-analytics-proxy ).live( click , function() {
3rdParty.webTrack( site1 , foo , $(this).data( trackme ));
});
问题是:
- By default,
$(this).data( trackme )
will return aString
- If I
$.parseJSON(..)
it, it will fail because"obj": this
is not a valid key/val pair in JSON string notation. - No matter what, when passed "thought" the
data-*
attr, only the String representation of of the JS obj name is passed.
我确实意识到 data- {{{{{{{{{{{{{}}}
}是用于“data> 和可论证
this <{}{{}}}不是数据,而是代码,所以它并不属于它。此外,我想避免“硬码” obj:这对键/val配对进入我的JS类(基本上把它从数据-* attr中取出来,如果可能的话,把它添加到JS方法的参数中。
最新消息1:我之所以使用这个是因为第三党联署材料图书馆预期会使用这个网站。
onclick= 3rdParty.webTrack("site1", "foo", {"obj": this, "rmethod": "track", "partial-path": "/foo/bar" }
all over the marcup. 我们正在研究一种不那么侵扰性的方法。 有时还有其他的钥匙/瓦尔配对也通过联署材料的其他对象。 obj: 这是用来说明问题的一个孤立的例子 。
更新 2: 这似乎很危险, 但我可以创建一个公约, 将属性以“ js: ” 前缀为“ js: ” 的字符串值 evval d. 将转换为“ code ” “obj ” : this... code> 当然, 这伴随着使用 eval 的所有危险, 这是我想不惜一切代价避免的。
我还可以简单地将“此”的任何字符串值修改为当前范围 < code> this , 其危险程度较低, 但海事组织不太优雅。