ruby on rails -在JavaScript函数中传递可选参数



是否可以将可选参数传递给javascript中的函数?

我在JavaScript中有一个函数,我想要最近,所以,相反,我在函数中使用var选项,我想传递变量的参数。

我的功能如下:

javascript:

function DrawChartPie(rows, title, chart_div, legend_position) {
google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawChart);
    function drawChart() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Tipo');
        data.addColumn('number', 'Quantidade');
        data.addRows(rows);
        var options = {
            width: 450,
            height: 250,
            title: title,
            legend: legend_position,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };
        var chart = new google.visualization.PieChart(document.getElementById(chart_div));
        chart.draw(data, options);
    }

}

助手:

 html = pie_chart(data, title, div, pos_leg)

我想做什么,但它没有工作:

助手:

 def pie_data(data_pie, div, options = {})
 ....
 optional = {
            width: 900,
            height: 500,
            title: title,
            legend: pos_leg,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };
...
html = pie_chart(data, title, div, pos_leg, optional)
javascript:

function DrawChartPie(rows, title, chart_div, legend_position, optional = {}) {
google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawChart);
    function drawChart() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Tipo');
        data.addColumn('number', 'Quantidade');
        data.addRows(rows);
        var option = optional || {
            width: 450,
            height: 250,
            title: title,
            legend: legend_position,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };
        var chart = new google.visualization.PieChart(document.getElementById(chart_div));
        chart.draw(data, option);
    }
}

当我尝试的时候,不显示什么

有可能这样做吗?如果有的话,有人能帮我一下吗?

谢谢=)对不起我的英语:P

---- UPDATE ----我按照建议更新了我的方法,但现在我又犯了一个错误。

javascript:

 function DrawChartPie(rows, title, chart_div, legend_position, optional) {
 ...
 var optional = optional || {
            width: 450,
            height: 250,
            title: title,
            legend: legend_position,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };
 ...
 }

助手:

 def pie_data(data_pie, div, options = {}){
 ...
 optional = {
            width: 900,
            height: 500,
            title: title,
            legend: pos_leg,
        backgroundColor: 'transparent',
                    is3D: true,
                    chartArea: {width:"90%"}
        };
  html = pie_chart(data, title, div, pos_leg, optional)
  }

我的错误:参数数错误(5 for 4)

我已经重启了我的服务器:p

有点。从技术上讲,所有JavaScript参数都是可选的,默认为undefined。这就是你如何拥有一个不同的默认参数。

function DrawChartPie(rows, title, chart_div, legend_position, optional) {
  optional = optional || {};

如果您希望可选参数的值为假值,例如null, NaN, 0, ""(空字符串)和false,则可以使用此值:

function DrawChartPie(rows, title, chart_div, legend_position, optional) {
  optional = optional === undefined ? {} : optional;

在ECMA Script 6标准实现之前,不可能将默认/可选参数传递给函数。

但是你能做的是,

function DrawChartPie(rows, title, chart_div, legend_position, optional) {
     optional = optional || {};

如果optional为假值,则{}将被赋值给optional

optional = optional || {};

相同
if (!optional) {
    optional = {};
}

我发现将任何可选值传递给函数的最佳方法是使用对象而不是参数列表。这也意味着参数不必按照任何顺序排列。您所需要做的就是在像处理任何对象一样使用这些属性之前测试它们是否存在。

function DrawChartPie(options) {
  if (options.rows) { data.addRows(options.rows); }
  if (options.title) { document.getElementById('title').innerHTML = options.title; }
  if (options.optional) { // loop over the object or whatever; }
}
DrawChartPie({
  rows: data,
  title: 'mychart',
  optional: {}
});

相关内容

  • 没有找到相关文章

最新更新