mojoportal中使用jquey的插件
以前在mojo中使用jquery的插件,都是把插件的文件内容直接写到了相关的模块中,这样的问题是不整洁,一大串代码。
如果直接在layout.master中引入插件文件,或者在自定义模块中引入插件文件,相关的js代码是不起作用的,原因查了下,
大概是说插件加载的时候,mojoportal自身携带的jquery还没有加载,所以会出错。
网上有几种解决方法,下面这种我比较喜欢,经验证,好用,原文地址:
原网址:http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Loading-custom-scripts-in-mojoPortal.aspx
第一步:在web\Controls文件夹下新建一个类文件,然后把相关插件文件拷贝到Web/ClientScripts文件夹下
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI.WebControls; using System.Web.UI; namespace mojoPortal.Web.UI { public class AnotherScriptLoader : WebControl { public List<string> Scripts { get; set; } public AnotherScriptLoader() { Scripts = new List<string>(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); SetupScripts(); } private void SetupScripts() { ClientScriptManager sm = Page.ClientScript; foreach (var script in this.Scripts) { if (!sm.IsStartupScriptRegistered(script)) sm.RegisterStartupScript(this.GetType(), script, string.Format(@"<script type='text/javascript' src='{0}'></script>", Page.ResolveUrl("~/ClientScript/" + script))); } } } }
第二步:在需要使用插件的模块html代码中中添加如下代码:
<portal:AnotherScriptLoader runat="server" ID="scriptLoader"/>
第三步:在需要使用插件的模块cs代码中修改Page_load方法,示例如下:
protected void Page_Load(object sender, EventArgs e)
{
scriptLoader.Scripts.Add("jquery.oembed.min.js");
scriptLoader.Scripts.Add("vimeooembed.js");
LoadSettings();
PopulateControls();
}