我正在寻找一种在Javascript中只定义函数一次的解决方案,类似于编译语言中的 #ifndef。我找到了几个库,据说可以模仿这种功能,但它们都没有起作用。
我正在使用MVC 3 Razor,并定义了一些HTML辅助程序,将基本上是用户控件的内容放到页面上。
每个控件都有一组JavaScript函数,为该控件定义特定的功能,因此问题在于:当多次调用辅助程序时,函数会被定义多次。
我希望能够找到一种方法,使非常少量的JavaScript代码仍然可以在辅助程序中定义,而不必将所有这些小辅助程序的JavaScript代码分割成单独的文件。
示例:
@helper CmsImage(int id)
{
var Html = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Html;
<text>
<input type="button" class="editor_function" style="display: none;" onclick="editImage(@id); return false;" />
<script>
function editImage(id) {
$('#alt_text' + id).attr('value', $('#' + id).attr('alt'));
$('#image_url' + id).attr('value', $('#' + id).attr('src'));
}
function saveImage(button, id) {
$(button).parent().parent().removeClass('color-yellow').addClass('color-red');
$(button).parent().siblings('div.widget-content').html('<img alt="' + $('#alt_text' + id).val() + '" src="' + $('#image_url' + id).val() + '" id="' + id + '" />');
}
#endif
</script>
Image Url:
<input type="text" id="image_url@{id.ToString();}" /><br />
Alt Text:
<input type="text" id="alt_text@{id.ToString();}" /><br />
<input type="button" value="save" onclick="saveImage(this, @{id.ToString();});" />
@Html.Raw(GetCurrentContent(id))
</text>
}
在浏览器中,上述代码无法工作,它会给我一个错误:'48: Unrecognized token ILLEGAL'