在JavaScript函数中传递可选参数

时间:2014-03-25 13:21:02

标签: javascript ruby-on-rails ruby-on-rails-3 rails-3.0.10

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

我在JavaScript中有一个函数,我想要,所以,我使用函数内部的var选项,我想传递变量for param。

我的功能如下:

的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

----更新---- 我像sugest一样更新了我的方法,但现在我又遇到了另一个错误。

的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)
  }

我的错误:参数数量错误(4个为5)

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

3 个答案:

答案 0 :(得分:1)

Passing default/optional parameter to functions, is not possible until ECMA Script 6 standard is implemented

但你可以做的是,

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

如果optional有假值,那么{}将被分配到optional

optional = optional || {};

与写作相同

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

答案 1 :(得分:1)

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

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

如果您预期nullNaN0""(空字符串)和false等值假值,则为{可选参数,您可以改为使用:

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

答案 2 :(得分:1)

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

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: {}
});