javascript - 动态变量名称javascript MVC

标签 javascript jquery asp.net-mvc

我在一个循环中运行了一些 javascript 代码,创建了一个图表(使用谷歌可视化)。运行所有这些代码后,我需要在其他地方访问这些对象。我的问题是我不能再次调用“图表”,因为它现在已经被覆盖了。

我设法找到了一个非常棘手的解决方案,其中涉及使用 MVC @ 东西在运行时动态生成一些东西,然后我将其强制作为变量名。它有效,但我认为这不是解决此问题的正确方法。有没有办法让我在每次运行时动态更改变量的名称?

以下代码多次运行。

@{
var myChart = "cData" + Model.ChartId.ToString();
}
...
function () {
    @myChart = new google visualization.ChartWrapper({ ... }); 
    dashboard.bind(slider, @myChart);
    dashboard.draw(data); 
}

每次运行代码时,myChart 都会发生变化,给我一个非常复杂的字符串。通过不带 ' 标记,它在运行时成为一个变量。 运行完所有这些之后,我有一个运行以下命令的调整大小函数:

@myChart .setOption('width', width);
@myChart .setOption('height', height);
@myChart .draw();

这也是 super hacky。我利用了 javascript 如何忽略空格,这样我就可以像对待对象一样对待 @myChart。

结果充满了语法错误,但它仍然可以运行,并且运行时会产生预期的结果。所以我的问题是是否有一个“合适的”解决方案,而不是为我需要制作的每个单独的图表制作单独的 javascript 函数。

谢谢。

最佳答案

您所做的并没有错,但还可以做得更好。

首先,您不必依赖空间来混合 JavaScript 和 Razor。

@(myChart).setOption('width', width);

但这仍然很难看。

方法一

<script>

    // global (usual caveats about globals apply)
    var charts = {};

</script>

@for( int i = 0; i < 10; i++ )
{
    string chartId = "chart-" + i;

    <script>

        charts['@chartId'] = new Chart();
        charts['@chartId'].setOption('width', width);
        charts['@chartId'].setOption('height', height);
        charts['@chartId'].draw();

    </script>
}

方法二

<script>

    function doResize(chart) {
        chart.setOption('width', width);
        chart.setOption('height', height);
        chart.draw();
    }

</script>

@for( int i = 0; i < 10; i++ )
{
    <script>

        (function () {

            // limit the scope of the "chart" variable
            var chart = new Chart();

            // perform other init

            // listen for resize in some manner

            $(window).on("resize", function() {
                doResize(chart);
            });

        })();

    </script>
}

方法 #2 是我的首选方法,因为它管理范围并且清晰易读。

关于javascript - 动态变量名称javascript MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36780713/

相关文章:

asp.net-mvc - Ajax请求与普通MVC

javascript - JSON 对象到 Angular 2 模板

javascript - 如何将按钮切换为事件和非事件 jquery

jquery - 如何从非 SSL 页面提交带有 SSL 的表单?

asp.net-mvc - Asp.net MVC 身份验证身份验证如何工作

asp.net-mvc - html.AttributeEncode和html.Encode有什么区别?

c# - 每次使用innerHTML或jquery html()渲染页面的一部分时如何防止页面滞后/挂起

javascript - 使用@keyframes 的复杂 css 动画

javascript - node js中require模块的路径在windows中工作但在linux中不工作

c# - 如何使用模型选择选项?