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(); 
}

 

 

posted on 2013-07-19 08:14  蓝蓝的天2016  阅读(505)  评论(0编辑  收藏  举报