jquery小部件- Uncaught TypeError: Object [Object Object]没有方法



当我尝试调用我的小部件时,我得到错误

Uncaught TypeError: Object [object Object] has no method 'koSpreadSheet' 

My plugin

(function ($) {
    //Create spreadsheet app
    $.widget('koSpreadSheet', {
        //Default values for options
        options: {
        },
        //Call Constructor
        _create: function () {
            this._CreateTable();
        },
        //Function to Render Table
        _CreateTable: function () {
            $.each(data.info[0], function (key, value) {
                console.log(data.info[0]);
                if ($.isNumeric(value)) {
                    if (jQuery.inArray(key, Equationlhs) === -1) {
                        html += "<td><input type='text' class='numericData' data-bind='value:" + key + "'></td>";
                        head += "<th class='variableHeading header-row' id= '" + key + "' title='Click to bind Equation'>" + key + "</th>";
                        list += "<li class='ui-state-default'>" + key + "</li>";
                    } else {
                        html += "<td><input type='text' class='numericData' readonly='readonly' data-bind='value:" + key + "'></td>";
                        head += "<th class='variableHeading header-row' id= '" + key + "' title='" + Equationlhs + "'>" + key + " (F)</th>";
                        list += "<li class='ui-state-default'>" + key + " (F)</li>";
                    }
                } else {
                    html += "<td><span data-bind='text:" + key + "'/></td>";
                    head += "<th class='header-row'>" + key + "</th>";
                }
            });
            var checklist = "<input type='checkbox' id='readonlyCheckbox'><span> Check to make fields ReadOnly</span></br>";
            checklist += "<input type='checkbox' id='viewonlyCheckbox'><span> Check for ViewOnly</span></br>";
            $("body").prepend(checklist);
            $("#div1 thead").append(head);
            $("#div1 tbody").append("<tr></tr>");
            $("#div1 tbody tr").append(html);
        }
    });
})(jQuery);
我HTML

<html>
    <head>
        <script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js"></script>
        <script src="knockout.mapping-latest.js"></script>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
        <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
        <script src="testPlugin.js"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                var data = {
                    "info": [{
                            "Name": "Noob Here1",
                            "Department": "Language",
                            "Sex": "Male",
                            "Basic_Salary": "300000",
                            "ESI": "58",
                            "Employee_PF": "60.50",
                            "Bonus": "2.60",
                            "Salary": "0",
                            "Tax": "0",
                            "Gross_Salary": "0"
                        }
                    ]
                }
                var EquationData = {
                    'eqn': [{
                            'Salary': 'Basic_Salary - ( ESI * .5 ) - Employee_PF + Bonus',
                            'Tax': '( Salary < 200000) ? 0: (( Salary < 300000) ? (.15* Salary ) : ( Salary * .30))',
                            'Gross_Salary': '( Salary - Tax )'
                        }
                    ]
                }
                EquationData = EquationData["eqn"][0];
                $.each(EquationData, function (lhs, rhs) {
                    Equationlhs.push(lhs);
                })
                $('#div1').koSpreadSheet();  //koSpreadSheet is name of widget
                $(document).tooltip();
            });
        </script>
    </head>
    <body>
        <table id="div1">
            <thead></thead>
            <tbody data-bind="foreach: info"></tbody>
        </table>
    </body>
</html>

如何解决这个问题

有多个错误:

    最重要的是放一个命名空间,在目前的情况下,我使用了自定义在名称前面。所以你的情况应该是:$.widget('custom.koSpreadSheet');

目前有一个限制,只能使用一个名称空间。【学习JQuery】

    注意初始化过程,这样你就不会得到未定义的变量。我在调试时遇到问题的变量:
    • data
    • Equationlhs
    • html
    • list
    • head

我刚刚用默认值&使它们全局可用,但是您应该对它们的初始化过程有细粒度的控制。

下面是基于您的代码的工作示例。

相关内容

  • 没有找到相关文章

最新更新