我希望能够运行在我的变量“表”中声明的函数。原因是为了避免基于字符串的解析来运行函数......
var Table = function( params ){
var rowTemplate = params.rowTemplate;
var table = params.table;
function GetRow()
{
return $( rowTemplate ).html();
}
function AddRow()
{
$( table ).append( GetRow() );
}
function BindEvents()
{
for( a in params.bind )
{
params.bind[ a ].action();
}
}
function Construct()
{
BindEvents();
}
Construct();
return {
AddRow: function() { AddRow(); }
}
};
var ProductsTable = new Table( {
table: "#ProductsTable tbody",
rowTemplate: "#ProductsTable_TemplateRow",
bind: [
{ action: AddRow, element: "#productsAddRowButton" }
]
} );
你能看到我的 ProductsTable 传递给我的 Construct 一个对象,该对象具有一个名为“bind”的属性,该属性是一个动作数组和实例化它们的元素。
AddRow 显然尚未声明。所以它会抛出一个错误。我不想做的是传入一个字符串“AddRow”,因为那时我将解析一个字符串......然后从 Table 范围内运行该函数,这很难看。
有什么解决办法吗?
这是我的解决方案,这要归功于“不,它无法完成”的回答,这让我走上了 switch 语句的轨道:( ... :):
var Table = function( params ){
var rowTemplate = params.rowTemplate;
var table = params.table;
function GetRow()
{
return $( rowTemplate ).html();
}
function AddRow()
{
$( table ).append( GetRow() );
}
function BindEvents()
{
for( a in params.bind )
{
switch( params.bind[ a ].action )
{
case "AddRow":
$( params.bind[ a ].element ).click( function(){
AddRow();
} );
break;
}
}
}
function Construct()
{
BindEvents();
}
Construct();
return {
AddRow: function() { AddRow(); }
}
};
var ProductsTable = new Table( {
table: "#ProductsTable tbody",
rowTemplate: "#ProductsTable_TemplateRow",
bind: [
{ action: "AddRow", element: "#productsAddRowButton" }
]
} );