我正在开发一个在浏览器中运行的复杂应用程序,但为了简化我遇到的问题,我创建了一个非常简单的示例来向您展示问题。请不要通过告诉我更改整个设置来回答这个问题。
我真正需要的是知道是否可以按照我尝试的方式完成,如果答案是否定的,我会回去找出要做的事情。
我正在尝试使用“自上而下”渲染方法,并从最小元素开始,渲染,将结果返回到父级,然后渲染父级(使用从子级返回的内容)。
/* Render method on Child object*/
Render: function () {
var renderedContent = $("#ChildTemplate").tmpl({ "Name": this.Name });
renderedContent.find(".clickable").click(function (e) { console.log("child"); return false; });
return renderedContent;
}
如果我使用了renderContent并将其附加到任何DOM对象,则click事件将触发我的代码,但是当我将此内容推回到模板中时,我无法弄清楚如何使其工作(如果它是可能的)。父级的render方法:
Render: function () {
var subContent = [];
$.each(this.children, function (index, element) {
subContent[subContent.length] = { "Content": element.Render() };
});
var renderedContent = $("#ParentTemplate").tmpl({ "Name": this.Name, "SubContent": subContent });
renderedContent.find(".parentclick").click(function (e) { console.log("parent"); return false; });
return renderedContent;
}
现在,父项上的点击事件有效,但子项无效。我最好的猜测是,这一行是破坏事件钩子的原因:
<tr><td>{{html Content.html()}}</td></tr>
但有没有办法将jQuery对象(我假设是从tmpl方法返回)放入输出而不会丢失事件挂钩?
不幸的是,在我完成渲染后尝试连接事件不是一个选项,因为最终结果将包含数百个元素,我需要将它们连接到正确的“父”对象。