Tengo una función llamada parseData
para representar la presentación html de los datos json devueltos en el archivo js principal.
var data = {
"title": "This is news"
};
$("button").click(function(){
var feedformat = $(this).data('format');
item_html = parseData(feedformat, data);
$('.feedback').append(item_html);
});
function parseData(type, data) {
var item_html = '';
switch(type) {
case 'story':
item_html = '<h5>'+data.title+'</h5>';
break;
}
return item_html;
}
Mi pregunta es, ¿es posible usar $.extend
para agregar más casos desde otro archivo de script que se extrae dinámicamente al hacer clic usando getscript
? Supongamos que tengo un nuevo caso llamado oldnews
. Ese caso contiene muchas etiquetas html, pero no se usará con frecuencia, por lo que no quiero almacenarlo en el archivo js principal y me gustaría incluirlo solo cuando la gente lo quiera. ¿Puedo usar algo como lo siguiente en otro archivo de script para extender parseData
que está en el archivo js principal?
(function($){
var addcase = $.fn.parseData;
$.fn.addcase = function( type,data ) {
case 'oldnews':
item_html = '<div>'+data.title+',but outdated</div>';
break;
};
}(jQuery));
2 respuestas
Esto suena bastante fácil, en realidad. Lo que realmente está intentando hacer es asignar los nombres de los formatos de datos a las funciones que producen la salida HTML. Podrías codificar fácilmente lo que ya has demostrado aquí con esto:
var parseFunctions = {
story: function(data) {
return '<h5>' + data.title + '</h5>';
},
oldnews: function(data) {
return '<div>' + data.title + ', but outdated</div>';
}
}
Cuando llegue el momento de generar algunos html, puede hacer esto:
$("button").click(function(){
var format = $(this).data('format');
if (typeof parseFunctions[format] == 'function')
$('.feedback').append( parseFunctions[format](data) );
});
Esto funciona porque Javascript trata las funciones como cualquier otro valor. Puede asignarlos a variables, copiarlos, etc. Con esta técnica puede extender el objeto base parseFunctions
con otro objeto que contenga funciones. Lo principal que debe tener en cuenta es la colisión clave. (Dos personas que intentan definir una función para el tipo de datos 'some_type'.)
En lugar de declaraciones de cambio / caso, podría hacer algo más extensible como recorrer un contenedor de calificadores de elementos de noticias y sus datos asociados. En JSON esto podría verse así:
{
"story": {
"html": "<h5>%s<\/h5>"
},
"oldnews": {
"html": "<div>%s, but outdated<\/div>"
}
}
Si tiene un objeto de JavaScript como ese, lo hace visible para parseData, que obtiene el valor "html" de cualquiera que coincida con "tipo" y reemplaza "% s" con el título. Cada vez que aparecen nuevos "casos", utiliza _.extend o $ .extend para agregar a la estructura.
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.