Así que tengo un problema realmente extraño con un enlace de clic knockoutjs que no se adjunta a las etiquetas de anclaje. Otro enlace de datos = "" funciona pero no el enlace de clic.knockoutjs click binding no funciona en foreach anidado
A continuación se puede ver el código HTML y parte de los js ViewModel archivo
var tag = function (data) {
this.count = data.Count;
this.id = data.Id;
this.title = data.Title;
this.tagGroup = data.TagGroup;
};
var tagContainer = function (data) {
this.tagList = $.map(data.Tags, function (item) { return new tag(item); });
this.letter = ko.observable(data.Letter);
};
var searchViewModel = function(){
var self = this;
self.tagContainerList = ko.observableArray([]);
self.addFilter = function (tag) {
//move tag to active filters and do some more cool stuff here
};
};
<div id="modal-all-tags" data-bind="with:searchViewModel">
<ul data-bind="foreach:tagContainerList">
<li>
<span data-bind="text:$data.letter()"></span>
<ul data-bind="foreach:tagList">
<li><a href="#" data-bind="click:$root.addFilter"><span data-bind="text:title"></span></a></li>
</ul>
</li>
</ul>
<a class="close-reveal-modal">×</a>
</div>
Básicamente se trata de una ventana emergente modal y su carga cuando el usuario hace clic en un enlace en la página. puedo enviar una solicitud al servidor y me devuelve una lista de Contenedores Tag cada tienen la letra inicial y una lista de etiquetas que se rindió por debajo de la carta como esta: Un una palabra 1 una palabra 2 B b palabra 1 b palabra 2 C palabra c 1 c palabra 2
y así sucesivamente ...
las letras son representados correctamente a, B, C y cada uno obtiene la lista de etiquetas correcta rendido por debajo de ellos con texto: título que se muestra correctamente.
Todo funciona excepto el addFilter(); función que quiero vincular a cada enlace en el taglist. El navegador simplemente salta y agrega un carácter hash a la url. Firebug tampoco muestra ningún error en los enlaces.
La razón por la que el contenedor div tiene un con: searchViewModel es porque hay un modelo de vista maestro para toda la página. Pero esto no debería importar, ya que está trabajando en todas las demás páginas del proyecto.
Lo único que se me ocurre es que el enlace de enlace $ root.addFilter es incorrecto, pero probé simplemente addFilter donde firebug muestra el error "addFilter is not defined;"
Y probé tanto $ parent como $ root.
¿Alguien tiene alguna sugerencia?
¿Podría explicar cómo lo resolvió, lo agradecería mucho. –