Sé que fue hace mucho tiempo, pero vale la pena una respuesta ya que encontré esta pregunta en Google mientras buscaba una respuesta yo mismo. Pensé en la solución, así que estoy aquí para compartirla. Dos años y "visible" todavía no funciona **, así que revisé el enlace "si". La vinculación de datos dentro del elemento de opción lo hizo oculto pero seleccionable. Knockout también tiene algo llamado: "sintaxis de flujo de control sin contenedor".
Esto funciona para mí:
<!-- ko if: category.parent == 0 -->
<option data-bind="value: category.name, text: category.name"></option>
<!-- /ko -->
Funciona porque si se esconde DOM. Desde el sitio web knockout:
si juega un papel similar al enlace visible. La diferencia es que, con visible, el marcado contenido siempre permanece en el DOM y siempre tiene sus atributos de enlace de datos aplicados - el enlace visible simplemente usa CSS para alternar la visibilidad del elemento del contenedor. Sin embargo, el enlace if, , agrega o elimina físicamente el marcado contenido en su DOM, y solo aplica enlaces a descendientes si la expresión es verdadera.
Puede leer más en la documentación: http://knockoutjs.com/documentation/if-binding.html
comprobar varias opciones aquí: http://jsfiddle.net/v8gyG/24/
** "visible" funciona en Chrome 27 y Firefox 21, pero no con selección múltiple en Chrome.
<!-- ko if: -->
funciona también en IE 10 y con multiselect en Chrome.