Я хотел бы иметь возможность запускать функцию, объявленную в моей переменной «Таблица». Причина заключается в том, чтобы избежать строки синтаксического анализа на основе запустить функцию ...Вызвать функцию, объявленную внутри переменной параметром
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 переходит в мой конструкт объект со свойством называется «привязывать», который представляет собой массив действий и элемент, который их создает.
AddRow, очевидно, еще не объявлен. поэтому он выдает ошибку. То, что я не хочу делать, это передать строку «AddRow», потому что тогда я буду разбирать строку ... затем запустить функцию из области «Таблица», и это уродливо.
Любые решения для этого?
Вот мое решение, благодаря ответу «Нет, это не может быть сделано», которые ставят меня на след заявление переключателя :(... :):
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" }
]
});
Ого, это много ненужных объявлений функций ... Просто вставьте их! – Bergi
Я не понимаю, что должно делать 'bindEvents'. Он просто выполняет набор заданных функций, но без какого-либо дополнительного контекста - что он должен делать с таблицей? Вы можете передать пустой массив и просто выполнить 'ProductsTable.AddRow()' впоследствии. – Bergi
Что объявляет функции, которые вы хотите привязать в масштабе области? Вы могли бы связать их, если бы они были объявлены снаружи. –