无法在LightSwitch HTML中使用Syncfusion JavaScript组件

无法在LightSwitch HTML中使用Syncfusion JavaScript组件,javascript,jquery,lightswitch-2012,syncfusion,Javascript,Jquery,Lightswitch 2012,Syncfusion,我刚刚花599美元买了SyncFusion Essential Studio Enterprise。我正在使用他们的LightSwitch Silverlight组件,没有任何问题,但在使用JavaScript组件时似乎出现了一些奇怪的问题 这是来自全新(完全为空)LightSwitch HTML客户端的default.htm文件的所有内容,包括SyncFusion所需的修改: <!DOCTYPE HTML> <html> <head> <met

我刚刚花599美元买了SyncFusion Essential Studio Enterprise。我正在使用他们的LightSwitch Silverlight组件,没有任何问题,但在使用JavaScript组件时似乎出现了一些奇怪的问题

这是来自全新(完全为空)LightSwitch HTML客户端的default.htm文件的所有内容,包括SyncFusion所需的修改:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=10" />
    <meta name="HandheldFriendly" content="true" />
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <title>Application1.HTMLClient</title>

    <script type="text/javascript">
        // Work around viewport sizing issue in IE 10 on Windows Phone 8
        if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
            document.writeln("<style>@-ms-viewport { width: auto!important; }</style>");
        }
    </script>

    <link rel="stylesheet" type="text/css" href="Content/light-theme-2.0.0.css" />
    <link rel="stylesheet" type="text/css" href="Content/msls-light-2.0.0.css" />
    <link rel="stylesheet" type="text/css" href="Content/jquery.mobile.structure-1.3.0.min.css" />
    <link rel="stylesheet" type="text/css" href="Content/msls-2.0.0.min.css" />
    <!-- SyncFusion -->
    <link rel="stylesheet" type="text/css" href="http://cdn.syncfusion.com/js/flat-azure/ej.widgets.all-latest.min.css" />
</head>
<body>
    <div id="msls-id-app-loading" class="ui-body-a msls-layout-ignore">
        <div class="msls-app-loading-img"></div>
        <span class="ui-icon ui-icon-loading"></span>
        <div class="ui-bottom-load">
            <div>Application1.HTMLClient</div>
        </div>
    </div>

    <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"></script>
    <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/globalize/0.1.1/globalize.min.js"></script>
    <script type="text/javascript" src="Scripts/winjs-1.0.min.js"></script>
    <!--<script type="text/javascript" src="Scripts/jquery-1.9.1.min.js"></script>-->

    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script type="text/javascript" src="Scripts/jquery.mobile-1.3.0.min.js"></script>
    <script type="text/javascript" src="Scripts/datajs-1.1.1.min.js"></script>
    <script type="text/javascript" src="Scripts/Generated/resources.js"></script>
    <script type="text/javascript" src="Scripts/msls-2.0.0.min.js"></script>
    <script type="text/javascript" src="Scripts/Generated/generatedAssets.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            msls._run()
                .then(null, function failure(error) {
                    alert(error);
                });
        });
    </script>
    <!-- SyncFusion -->
    <script src="http://ajax.aspnetcdn.com/ajax/globalize/0.1.1/globalize.js"></script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>
    <script src="http://borismoore.github.io/jsrender/jsrender.min.js"></script>
    <script src=" http://ajax.aspnetcdn.com/ajax/globalize/0.1.1/globalize.cultures.js "></script>

    <script src="http://cdn.syncfusion.com/js/ej.widgets.all-latest.min.js"></script>
</body>
</html>

Application1.HTMLClient
//在Windows Phone 8上解决IE 10中的视口大小问题
if(navigator.userAgent.match(/IEMobile\/10\.0/){
document.writeln(“@-ms viewport{width:auto!important;}”);
}
Application1.HTMLClient
$(文档).ready(函数(){
msls._run()
.then(空,函数失败(错误){
警报(错误);
});
});
在IE11/10中,我收到以下错误消息:“加载模型失败:错误:堆栈空间不足”

在Chrome中,我收到一条类似的消息:“加载模型失败:RangeError:超出了最大调用堆栈大小”

在FireFox中,我也收到了类似的消息:“加载模型失败:内部错误:递归太多”

这些错误表明它可能是一个试图多次注册的组件,我的问题是为什么以及如何修复它

当然,这在标准HTML页面上很好(我正在查看提供的示例)…只是LightSwitch存在问题

编辑 以下是我从Syncfusion收到的回复。如前所述,这不会产生任何影响:

启动电子邮件

感谢您使用Syncfusion产品

我们能够重现上述报告的问题,并分析了该问题是由于msls-2.0.0.js中不正确的数组迭代以及在ej.widget.all.js中添加不需要的数组原型函数来查找lastItem造成的。为了克服这个问题,我们准备了一项工作,内容如下

代码段:

<script src="http://cdn.syncfusion.com/js/ej.widgets.all-latest.min.js"></script>
<script type="text/javascript">
    ej.buildTag = function (tag, innerHtml, styles, attrs) {
        var tagName = /^[a-z]*[0-9a-z]+/ig.exec(tag)[0];
        var id = /#([a-z]+[-_0-9a-z]+)/ig.exec(tag);
        id = id ? id[id.length - 1] : undefined;
        var className = /\.([a-z]+[-_0-9a-z ]+)/ig.exec(tag);
        className = className ? className[className.length - 1] : undefined;
        return $(document.createElement(tagName))
            .attr(id ? { "id": id } : {})
            .addClass(className || "")
            .css(styles || {})
            .attr(attrs || {})
            .html(innerHtml || "");
    }
</script>

ej.buildTag=函数(标记、innerHtml、样式、属性){
变量标记名=/^[a-z]*[0-9a-z]+/ig.exec(标记)[0];
变量id=/#([a-z]+[-\u 0-9a-z]+)/ig.exec(tag);
id=id?id[id.length-1]:未定义;
var className=/\.([a-z]+[-\u 0-9a-z]+)/ig.exec(tag);
className=className?className[className.length-1]:未定义;
返回$(document.createElement(标记名))
.attr(id?{“id”:id}:{})
.addClass(类名| |“”)
.css(样式|{})
.attr(attrs |{})
.html(innerHtml | |“”);
}
我们已确认这是一个缺陷,并为此记录了一份缺陷报告。我们建议您遵循上述解决方法,直到缺陷出现在我们即将发布的主版本[2014 Vol-1]中,该版本预计将于3月底发布。在此之前,我们感谢您宝贵的耐心

如果您需要进一步帮助,请联系我们

谢谢/问候


结束电子邮件

这是由于msls-2.0.0.js中的数组迭代不正确,以及为在ej.widget.all.js中查找lastItem而添加的不需要的数组原型函数

要使工作正常,您可以在
$(文档)中添加以下脚本。就绪

$(document).ready(function () {
    delete Array.prototype.lastItem;
    msls._run()
    .then(null, function failure(error) {
        alert(error);
    });
});
编辑

在上述解决方法之后,syncfusion控件无法工作。关于此问题,您能否与Syncfusion支持部门联系

EDIT2

我找到了使控件正常工作的解决方法。将下面的脚本粘贴到default.htm中

<script src="http://cdn.syncfusion.com/js/ej.widgets.all-latest.min.js"></script>
<script type="text/javascript">
    ej.buildTag = function (tag, innerHtml, styles, attrs) {
        var tagName = /^[a-z]*[0-9a-z]+/ig.exec(tag)[0];

        var id = /#([a-z]+[-_0-9a-z]+)/ig.exec(tag);
        id = id ? id[id.length - 1] : undefined;

        var className = /\.([a-z]+[-_0-9a-z ]+)/ig.exec(tag);
        className = className ? className[className.length - 1] : undefined;

        return $(document.createElement(tagName))
            .attr(id ? { "id": id } : {})
            .addClass(className || "")
            .css(styles || {})
            .attr(attrs || {})
            .html(innerHtml || "");
    }
</script>

ej.buildTag=函数(标记、innerHtml、样式、属性){
变量标记名=/^[a-z]*[0-9a-z]+/ig.exec(标记)[0];
变量id=/#([a-z]+[-\u 0-9a-z]+)/ig.exec(tag);
id=id?id[id.length-1]:未定义;
var className=/\.([a-z]+[-\u 0-9a-z]+)/ig.exec(tag);
className=className?className[className.length-1]:未定义;
返回$(document.createElement(标记名))
.attr(id?{“id”:id}:{})
.addClass(类名| |“”)
.css(样式|{})
.attr(attrs |{})
.html(innerHtml | |“”);
}

感谢您尝试Bharath,我已经为此向SyncFusion提交了支持票。如果我得到一个结果,我将用结果更新。@agAus我已经编辑了响应以使控件工作。请检查Hi Bharath…你是在Syncfusion电子邮件中给我发送完全相同回复的人吗?这种变通办法不起作用,也不能纠正问题。我将整个解决方案文件转发给Syncfusion进行分析。他们已经确认这是他们产品中的一个缺陷。@agAus不,我不是。我想我可能已经有了突破。我把你的两个建议结合起来了。我已经添加了delete Array.prototype.lastItem,并覆盖了buildTag函数,这两个函数的结合似乎更好。我发现在LS-HTML客户端中,组件呈现的效果很有趣,我正在尝试解决这个问题。将很快更新。