当我尝试调用我的小部件时,我得到错误
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
我刚刚用默认值&使它们全局可用,但是您应该对它们的初始化过程有细粒度的控制。
下面是基于您的代码的工作示例。