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)?
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 fallbacktypeof 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;
}