我有一组可重复使用的linc list渲染器,linc list是一个包含Description,Uri和Thumbnail的对象数组。
这些渲染器采用linc列表和目标div,并根据渲染器,在目标div中以不同方式渲染linc列表。
我正在使用一个BasicList渲染器,它带有一个linc列表,并为Linc List中的每个项目生成一个带有LI的UL。
我还希望能够传入将添加到每个LI的HTML元素数组。
所以说,例如,LincList是一个用户列表,我希望能够在每个用户名旁边放一个按钮来禁用用户,我希望能够这样做:
var userLincList = someFunctionToFetchUsersLincListFromServer();
var targetDivForList = jQuery('<div>');
var disableUserButton = jQuery('<button>', {html : "Disable"});
// There are a whole bunch of different options that can be passed in to the renderer
// (Otherwise it will use defaults) - An array of additional elements is one of them.
var basicListRenderOptions = {};
basicListRenderOptions.additionlElementsToRender = Array();
basicListRenderOptions.additionlElementsToRender.push(disableUserButton);
LincListerRenderers.RenderBasicLincList(userLincList, targetDivForList, basicListRenderOption)
这会给我们:
<div>
<ul>
<li><span>Description1</span><img src="Thumbnail"><button>Disable</button></li>
<li><span>Description2</span><img src="Thumbnail"><button>Disable</button></li>
<li><span>Description3</span><img src="Thumbnail"><button>Disable</button></li>
<li><span>Description4</span><img src="Thumbnail"><button>Disable</button></li>
</ul>
</div>
好到目前为止一切都那么好我已经完成了所有这些 - 但实际上有任何用处,其他元素需要一个onClick事件。
我想要的是用户能够声明onClick正常的jQuery方式,即:
var disableUserButton = jQuery('',{html:“Disable”,click:DisableUser()});
为了使这个有用,我需要能够传递有关单击每个元素上的onClick函数的列表项的信息。
因此,当我创建LI时,我想要做的就是获取当前的click函数,取消绑定它,将它包装在我自己的函数中,只需调用它(传入我想要的参数)然后重新绑定我的对click事件的包装函数。
例如:
for(var i = 0; i < options.additionlElementsToRender.length; i++)
{
var listItemElement = options.additionlElementsToRender[i].clone();
if(listItemElement.click != null)
{
var listItemElementClickFunction = jQuery(listItemElement).click;
listItemElement.unbind('click');
listItemElement.click(
function()
{
listItemElementClickFunction(lincItem.description, lincItem.Uri, lincItem.Thumbnail)
});
}
jQuery(listItemElement).appendTo(listItem);
}
现在的问题是A)listItemElement.click总是有一个值,即使用户没有为它分配处理程序而B)var listItemElementClickFunction = jQuery(listItemElement).click给我jQuerys点击包装函数,而不是实际的处理程序为分配的用户提供功能。
有没有办法可靠地检测处理程序是否已分配给.click,还有办法直接访问处理函数吗?
很抱歉这么长的帖子!