在大量使用 Java 和 C++ 经验之后,我第一次使用 JS 和 jQuery。我喜欢 jQuery 的想法$(document).on('click', 'btn-selector', react)
,但对于更复杂的小部件,我发现自己一遍又一遍地陷入同样的困境:在每个react
处理程序中,我必须将小部件作为一个整体进行查找并重建我对它的所有知识。
例如,我正在用<input>
s 制作一个简单的小部件,用户可以使用它来制作评分等级:90 个映射到 A,80 个映射到 B,等等。当其中一个输入发生变化时,我想检查一下确保输入仍然正常(例如,您的秤不能达到 90、70、80)。
所以,我有类似的东西
实际的
$(document).on('click', '.scale-input', function() {
var widget = $(this).closest('.scale-widget-container');
ensureLevelsAreInOrder(widget);
});
几乎每个处理程序都必须有第一行才能找到它的上下文。我宁愿有这样的代码:
首选
$(document).on('click', '.scale-input', ensureLevelsAreInOrder);
问题在于,在这种形式中,ensureLevelsAreInOrder
只有对更改的输入的引用,而不是更大的上下文。
在 Java 或 C++ 中,我会在小部件上调用构造函数,并且每个输入都会有一个处理程序,其中包含通过成员变量烘焙的上下文。我可以做类似的事情
$(function() {
$('.scale-widget-container').scaleWidget();
});
通过scaleWidget()
设置上下文处理程序,但是我正在使用的页面使用 ajax 加载了很多它的 html,并且我没有可靠的时间来运行该初始化。
如果我们不想在 HTML 中使用 JS,这是我们必须处理的常见问题,还是有我还没有遇到的解决方案?