Estoy intentando cargar y analizar datos json de una fuente externa en una tabla mediante Knockout JS. Hasta ahora, todo ha sido un éxito a través del siguiente código:Carga diferida en Knockout JS
// Snippet
var self = this;
self.notices = ko.observableArray([]);
self.currentTab = ko.observable(5);
ko.computed(function() {
$.getJSON('http://json.source.here.com/tab/'+ko.toJS(self.currentTab), function(threads) {
if (threads !== null) {
self.notices(threads);
} else {
self.notices([]);
}
});
}, self.notices);
Cuando un usuario hace clic en una determinada pestaña sería cargar los datos JSON (hilos del foro) en función del valor pestaña seleccionada (self.currentTab) en el tabla en forma de filas (self.notices).
Todo funciona como se esperaba, sin embargo, me di cuenta mientras navegaba por otras páginas que no tienen los enlaces anteriores, el json todavía se está cargando ($ .getJSON está activado). Me preocupa que esto pueda tener algunos efectos perjudiciales en el rendimiento de mi sitio web, ya que está cargando la fuente JSON aunque no sea necesaria.
EDIT: me di cuenta de esto a través de la consola de desarrollador de Google Chrome.
Actualmente tengo mi modelo de vista en un archivo JavaScript que también está siendo utilizado por todas las demás páginas. Consiste en enlaces para todas las páginas.
Mi pregunta es, ¿cómo puedo cargar los datos json en una página específica o solo cuando los enlaces están presentes - carga lenta? Preferiblemente, me gustaría mantener todos los enlaces en un solo archivo de JavaScript, no quiero separarlos y cargarlos por página.
Muchas gracias :) I terminé usando tu complemento Knockout JS. Sin embargo, cambié el "ko.observable" por "ko.observableArray" para servir mejor a mi propósito, eso debería estar bien ¿no? Parece estar funcionando como se espera ahora. – MrSaints
Sí, eso no debería ser un problema. Un observableArray es realmente un observable debajo con algunos métodos adicionales agregados para manejar operaciones de matriz. –
Gracias de nuevo. Ah, y acabo de notar que no parece estar actualizando cuando hago clic en una pestaña diferente. Debería volver a evaluar cuando uno de los cambios observables ¿verdad? – MrSaints