Tengo una lista de archivos adjuntos en una página que se genera utilizando una llamada jQuery $.ajax
y Knockout JS.Refreshing list after ajax call with Knockout JS
Mi HTML se parece a (esto es despojado de vuelta):
<tbody data-bind="foreach: attachments">
<tr>
<td data-bind="text: Filename" />
</tr>
</tbody>
tengo una función que obtiene la lista de los archivos adjuntos que se devuelve como respuesta JSON:
$(function() {
getFormAttachments();
});
function getAttachments() {
var request = $.ajax({
type: "GET",
datatype: "json",
url: "/Attachment/GetAttachments"
});
request.done(function (response) {
ko.applyBindings(new vm(response));
});
}
Mi vista del modelo parece:
function vm(response) {
this.attachments = ko.observableArray(response);
};
Hay un botón de actualización que el uso puede hacer clic para volver a cargar esta lista porque respecto a mayo se han añadido los archivos adjuntos de tiempo/retirado:
$(function() {
$("#refresh").on("click", getAttachments);
});
La prestación inicial de la lista de archivos adjuntos está muy bien, sin embargo, cuando llamo getAttachments
de nuevo a través del botón de actualización, haga clic se añade la lista a (de hecho, cada elemento es duplicado varias veces).
He creado un jsFiddle para demostrar este problema aquí:
¿Qué estoy haciendo mal?
Kev - nice post. Todavía estoy un poco confundido por eso. Nuevo para nocaut. Estoy teniendo problemas similares simplemente cargando un ViewModel con datos AJAX en la carga de la página. Estoy seguro de que me falta un punto pequeño pero serio. Una cosa que me confunde es que algunos tutoriales muestran 'viewmodel' como un objeto (por ejemplo' var viewmodel = {something: ko.observable()} ') y otros como una función (por ejemplo' function ViewModel() {this.something = ko.observable()} ') - alguna sugerencia? –
@ one.beat.consumer - vea mi pregunta de seguimiento: http://stackoverflow.com/questions/9589419/difference-between-knockout-view-models-declared-as-object-literals-vs-functions - the la respuesta y los comentarios a continuación deberían aclarar las cosas. Recomiendo gastar $ 25 y ver esto: http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=knockout-mvvm – Kev
Voy a ver su otra pregunta; gracias. Tengo una suscripción de pluralsight y la he visto 2-3 veces ... apenas rascan la superficie y gran parte de ella es vieja ahora que 2.0 está fuera, estaban usando 1.2 o 1.3 beta ... –