最新编辑:我在问题末尾添加了我的解决方案,基于 chrisvillanueva 的回答
我有一个创建按钮的辅助方法,当单击此按钮时会出现一个对话框(jQuery UI 对话框),该按钮在页面上出现多次。
辅助方法包含我只想呈现一次的部分,例如 javascript 代码和单击按钮时出现的对话框的 HTML。(基本上唯一应该多次呈现按钮本身的 HTML 的东西)
为了确保只有在我使用 Cassette (http://getcassette.net/) 时才加载 javascript,但我找不到对话框 HTML 的好解决方案,我看到 Cassette 有 HTML 模板,但它非常复杂,因为HTML 在脚本标签中呈现。
目前我的解决方法是使用 Cassette 的 HTML 模板,并在我以 开头和结尾的模板中,这样它消除了包装块并且 HTML 由浏览器呈现 - 我知道,这很糟糕......:/
这是 HTML我目前正在使用 Cassette 的 HTML 模板
</script> <!-- This closes the starting <script> that is generated by Cassette -->
<div class="recommendDialog" title="Recommend This Goal To A Friend">
</div>
<script> <!-- This is for the closing </script> that is generated by Cassette -->
将不胜感激任何想法,最好使用 Cassette 或 MVC3 内置的东西(我不喜欢添加更多库)
编辑:也许还有一种简单的方法可以将jQuery UI的对话框与脚本块内的html一起使用(我尝试使用它并进行搜索,但除了将内容“推送”到另一个html元素之外找不到任何东西)
示例代码:
@helper BarControl(WebViewPage<MyModel> page)
{
// Currently using Cassette for javascripts
Cassette.Views.Bundles.Reference("barcontrol", "body");
// I tried using Cassette HTML Templates but the rendered HTML is in a <script> tag
// which I can't use with jQuery UI's dialog widget
// Cassette.Views.Bundles.Reference("barcontroltemplates", "body");
// This HTML is for the dialog, should only be rendered once in the final HTML
<div class="dialog" title="I'm a dialog">
<span>I'm a dialog</span>
</div>
// This is the HTML for the button which should be rendered every time this helper is called
<div class="area">
<div class="right">
<ul>
<li id="button"><a href="#">I'm a button</a></li>
</ul>
</div>
</div>
}
javascript只是在按钮上设置了一个点击事件$(".dialog").dialog()
我最终做了什么:
基于 chrisvillanueva 的回答。我使用 Cassette 的 HtmlTemplates 来呈现这个 HTML:
<script id="dialogHtmlTemplate" type="text/html">
<div class="dialog" title="dialog">
<span>Content of dialog</span>
</div>
</script>
为了将它与 jQuery UI 的对话框(http://api.jqueryui.com/dialog/)一起使用,我使用以下代码:$($("#dialogHtmlTemplate").html()).dialog()
这会通过浏览器呈现 html 并在其周围创建对话框,它无需添加更多库,如不需要针对上述情况的 mustache.js 或 jQuery 模板(没有模板只是重复)。
性能方面我认为这不是最好的解决方案(它每次都复制内部 html)但现在它已经足够好了......