я наткнулся на странное требование (устанавливается самостоятельно) ...HTML5 данных со сложным объектом JSON и JavaScript
Я создаю легко интегрировать AJAX контента загрузчик плагин с большим количеством опций и обратных вызовов. Поскольку загрузчик является классом, и разработчик может иметь несколько экземпляров на одной странице, я хотел избавиться от всего уродливого кода, необходимого для каждой инициализации, и решил вместо этого использовать атрибуты данных - они выглядят потрясающе и профессионально!
Вопрос: Как добавить функции и javascript вообще в атрибут данных?
Пример:
var url = "someurl/goes/here/";
var Template = new TemplateEngine('Name', {
onCreate: function(template, parts) {
// do something with template parts
template.ID += 1;
},
onRender: function(template, parts) {
template.addClass('flash');
}
});
var settings = {
container: DOM_ELEMENT|STRING,
template: Template,
disableDefaultRender: true,
// a bunch of hooks and callbacks like this:
onBeforeRequest: function(loader, data) {
new_data = data;
// modify request data somehow
loader.requestData = new_data;
},
onRender: function(loader, data) {
loader.renderData(data, function(part) {
// define specific rendering logic for different template parts
// in required
});
},
onAfterRequest: function(loader, data) {
},
onError: function(loader, data) {
}
// etc, etc
};
var THE_LOADER = new SuperFancyAjaxLoader(url, settings);
Моя первоначальная идея заключается в том, чтобы как-то поставить все выше внутри указанного атрибута данных:
<div data-fancy-stuff="{all-or-most-of-the-above}">more stuff</div>
и сделать сам скрипт найти все элементы и инициализировать экземпляры для каждого из них:
var elements = document.querySelector('[data-fancy-stuff]');
for(item in elements) {
try {
var data = elements[item].getAttribute('data-fancy-stuff');
var THE_LOADER = new SuperFancyAjaxLoader(data.url, data.settings);
} catch (ex) {
console.log('Someone messed with prototypes');
}
}
Идея помещения функций javascript внутри атрибут идиот? Или есть способ на самом деле поместить некоторые js внутри атрибута?
Я понимаю, что если требуется так много javascript, бессмысленно пытаться помещать его в атрибут, но в реальных случаях (для этой конкретной задачи) у меня будет 3-5 загрузчиков контента на странице, большая часть они (или все) будут использовать один и тот же шаблон и логику визуализации, но все они должны будут самостоятельно изменить данные запроса.
p.s. Eval - Зло.
Редактировать: Я открыт для разработки предложений, которые не связаны с внешними инфраструктурами MVC.
Честно говоря, я бы посмотрел на то, что вы делаете.Я не понимаю, почему вы просто не ссылаетесь на методы в своих атрибутах 'data' и запускаете' window [elements [item] .getAttribute ('data-fancy-stuff)] 'вместо этого, пока вы делаете каждую функцию член окна или любой другой объект, который вы хотите. Вот как вы можете запустить строку. Но я никогда бы никогда не предлагал вводить кучу JavaScript внутри атрибутов HTML. – EHorodyski
Я использовал этот подход пару лет назад, и он работает, но со временем он становится все более и более недружелюбным для поддержания. – Martin
Тогда я думаю, что пришло время взглянуть на ваш код и попытаться его перестроить со всем уважением. – EHorodyski