簡體   English   中英

JavaScript硬編碼對象用作參數,但不引用全局對象

[英]Javascript hard-coded object works as parameter, but not reference to global object

我在JQuery Flot中遇到了一個奇怪的問題。

我一直在跑步

var plot = null;

function initPlot () {
    plot = $.plot("#graph", myData, { /* my options here */ });
}

而且一切正常。

我將選項數據移到了函數范圍內的變量中

var plot = null;

function initPlot () {
    var myOptions = { /* my options here */ };
    plot = $.plot("#graph", myData, myOptions);
}

再次,一切正常。

然后,我將該變量移至更廣的范圍(以便可以在其他函數中引用它)。

var plot = null;
var myOptions = { /* my options here */ };

function initPlot () {
    plot = $.plot("#graph", myData, myOptions);
}

突然無法正確繪制。 更讓我感到困惑的是,它獲取了大多數選項的值-出現了圖形,而不是數據。

使用Chrome的調試器,我可以在調用$.plot()時看到myOptions具有正確的值。 我也試着設置一個局部變量o = myOptions並調用$.plot()o代替myOptions ,但是這也不能繪制數據。

是什么原因造成的,我該如何解決?

我應該注意,我正在使用Flot.Grow和Flot.Stack,但是禁用這些不會改變結果。

再次編輯

根據注釋,這實際上是我的代碼的狀態:

<body>
    <div id="graph" style="width: 100%; height: 800px;"></div>
    <script>
        var idMap = {};
        var yesData = [];
        var noData = [];
        var incData = [];
        var voteData = [{ label: "Yes votes", data: yesData },
                        { label: "No votes", data: noData },
                        { label: "Not met quorum", data: incData }];
        var ticks = [];
        var plot = null;

        var myOptions = {
            series: {
                //stack: true,
                lines: {
                    show: false,
                    fill: true,
                    steps: false,
                },
                bars: {
                    show: true,
                    barWidth: .8,
                    horizontal: true,
                },
                //grow: {
                //    active: false,
                //    steps: 20,
                //    stepDirection: "up",
                //    stepMode: "linear",
                //    valueIndex: 0,
                //    growings: [{
                //        valueIndex: 0,
                //    }]
                //},
            },
            yaxis: {
                min: -.2,
                max: 10, //dictLen(idMap),
                //ticks: ,
                //tickLength: 0,
            },
            xaxis: {
                min: 0,
                max: 200,
            },
            grid: {
                hoverable: true,
            },
        };

        function dictLen(obj) {
            var size = 0, key;
            for (key in obj) {
                if (obj.hasOwnProperty(key)) size++;
            }
            return size;
        };

        function setDataPoint(val) {
            var total = val.r["yes"] + val.r["no"];
            if (total < val.q) {
                incData.push([total, idMap[val.id]]);
            }
            else {
                yesData.push([val.r["yes"], idMap[val.id]]);
                noData.push([val.r["no"], idMap[val.id]]);
            }
        }

        function initData() {
            $.getJSON('/Vote/results', function (data) {
                $.each(data, function (key, val) {
                    idMap[val.id] = key;
                    ticks.push([key + .4, val.nm]);
                    setDataPoint(val);
                });

                initPlot();
            });
        }

        function initPlot() {
            plot = $.plot("#graph", voteData, myOptions);
        }

        $(document).ready(function () {
            initData();
        });
    </script>
</body>

原來我有點白痴。

問題是我在填充idMap之前正在計算myOptions.yaxis.max 然后,當我在這里等待答案時,我在數據庫端進行了一些重構,從而導致數據集為空。

當我修復數據庫並將myOptions設置為僅靜態值時,它工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM