Como gerir vários ficheiros Cdn e a expressão Cdnfallback?

Se eu quiser gerir o meu ficheiro Cdn através do ficheiro bundleconfig.vb e carregar o Kendo-ui a partir do Cdn, preciso de criar 2 pacotes como este:

    Dim kendoWebBundle = New ScriptBundle("~/bundles/kendo", kendoCndWeb).Include("~/Scripts/kendo/kendo.web.min.js")
    kendoWebBundle.CdnFallbackExpression = "typeof kendo"
    bundles.Add(kendoWebBundle)

    Dim kendoAspBundle = New ScriptBundle("~/bundles/kendoMvc", kendoCndAsp).Include("~/Scripts/kendo/kendo.aspnetmvc.min.js")
    kendoAspBundle.CdnFallbackExpression = "typeof kendo"
    bundles.Add(kendoAspBundle)

No entanto, a minha segunda expressão não vai funcionar, uma vez que {[3] } será definida:

Resultado:

<script src="//cdn.kendostatic.com/2014.2.716/js/kendo.web.min.js"></script>
<script>(typeof kendo)||document.write('<script src="/Gabarit.Web/bundles/kendo"><\/script>');</script>

<script src="//cdn.kendostatic.com/2014.2.716/js/kendo.aspnetmvc.min.js"></script>
<script>(typeof kendo)||document.write('<script src="/Gabarit.Web/bundles/kendoMvc"><\/script>');</script>

existe alguma expressão de fallback kendo.aspnetmvc ou preciso de gerir o meu Cdnfallback em conjunto (não existe expressão de fallback no bundleconfig, validar manualmente o tipo de kendo, se não estiver definido, carregar todos os ficheiros de kendo localmente)?

Se eu for com a segunda opção, o que aconteceria se o meu CDN mandasse o kendo.site.minuto.js, mas não kendo.aspnetmvc.minuto.js? Acho que o kendo seria definido e que nenhum recuo local irá acontecer...

Author: Nicholas, 2015-04-01

1 answers

Referir a interface de Kendo do CDN com um 'Fallback' de Script Local

Isto é o que Telerik sugere que devias fazer.

Basta testar para um único script e se ele falhar carregar tudo localmente. Não faças testes para o kendo.todo.minuto.js, e depois para o kendo.aspnetmvc.minuto.js, se o CDN tem problemas, provavelmente não vais ter nenhum.

<script src="http://cdn.kendostatic.com/2014.1.318/js/kendo.all.min.js"></script>
<script>
    if (typeof kendo == "undefined") {
        // checking for loaded CSS files is cumbersome,
        // that's why we assume that if the scripts have failed, so have the stylesheets

        // fallback to local Kendo UI stylesheets
        document.write(decodeURIComponent('%3Clink rel="stylesheet" href="/path/to/local/kendo.common.min.css" %3C/%3E'));
        document.write(decodeURIComponent('%3Clink rel="stylesheet" href="/path/to/local/kendo.blueopal.min.css" %3C/%3E'));

        // fallback to local Kendo UI scripts
        document.write(decodeURIComponent('%3Cscript src="/path/to/local/kendo.all.min.js" %3E%3C/script%3E'));
        // also add kendo.aspnetmvc.min.js or kendo.timezones.min.js, if needed
    }
</script>

ASP.NET plataforma de otimização Web

Como estás a fazer agora, desculpa pelo C# abaixo. Põe a tua Os programas de Kendo UI em pacotes separados e indicar a expressão de fallback typeof kendo == undefined.

Teste CSS da mesma forma, se o CDN não fornecer os scripts, então o seu CSS também não estará lá.

Traz o pacote do NuGet. Agora no seu BundleConfig você pode configurar os seus pacotes para incluir não só o CdnPath, mas também um CdnFallbackExpression:
public static void RegisterBundles(BundleCollection bundles)
{        
    bundles.UseCdn = true;
    var kendo = new ScriptBundle("~/bundles/scripts/kendo", "http://cdn.kendostatic.com/2015.1.318/js/kendo.all.min.js").Include("~/Scripts/kendo/kendo.all.min.js");
    kendo.CdnFallbackExpression = "typeof kendo == undefined";
    bundles.Add(kendo);

    var kendoMvc = new ScriptBundle("~/bundles/scripts/kendoMvc", "http://cdn.kendostatic.com/2015.1.318/js/kendo.aspnetmvc.min.js").Include("~/Scripts/kendo/kendo.aspnetmvc.min.js");
    kendoMvc.CdnFallbackExpression = "typeof kendo == undefined";
    bundles.Add(kendoMvc);      

    BundleTable.EnableOptimizations = true;
}
 2
Author: Nicholas, 2015-04-07 22:26:12