2012-06-18 8 views
9

Voy a utilizar cualquiera de las librerías knockout.js o angular.js (b/c del soporte de enlace) para una aplicación web.¿integración de angular.js (o knockout.js) con otras bibliotecas de UI?

Mi pregunta es: ¿cómo es su experiencia la integración de estas bibliotecas en lib existentes de interfaz de usuario como Dojo, jQueryUI, Ext.js, YUI, .. E.g. ¿Cómo es el uso de soporte/sintaxis de enlace de datos en las librerías de la interfaz de usuario? ¿Tiene que implementar algo así como el enlace personalizado para usar el widget de UI lib?

Respuesta

15

Para Knockout la situación es bastante bueno. Se puede integrar con widgets de terceros a través del custom bindings. Enlaces API es muy simple y estrecho. Todo lo que necesita es implementar uno o dos métodos (citando documentos Knockout):

ko.bindingHandlers.yourBindingName = { 
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     // This will be called when the binding is first applied to an element 
     // Set up any initial state, event handlers, etc. here 
    }, 
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     // This will be called once when the binding is first applied to an element, 
     // and again whenever the associated observable changes value. 
     // Update the DOM element based on the supplied values here. 
    } 
}; 

mayor parte del tiempo la implementación de solo método update es suficiente. Incluso hay a collection of ready-made bindings for jQuery UI. No cubre todos los widgets de la interfaz de usuario de jQuery, pero dado que la creación de enlaces personalizados es tan simple, puede implementar sus propios enlaces según lo considere necesario.

En cuanto a Angular JS la situación es más difícil. Puede crear un enlace personalizado como parte de su propio Directive. Directivas API requiere que escriba mucho más código. El ciclo de vida de las directivas también es bastante complejo. Entonces, tomarían un buen tiempo para aprender.

Al mismo tiempo, le permite especificar una gran cantidad de aspectos diferentes del comportamiento. Por ejemplo, puede reescribir completamente la representación HTML interna de un widget a través del directive y usar plantillas angulares en su interior. En Knockout necesitarías usar jQuery para eso. Desafortunadamente, a diferencia de los enlaces personalizados en las directivas Knockout, son más adecuados para escribir sus propios widgets y no para integrarse con los existentes.

En resumen:

  • fijaciones Knockout son más fáciles. La integración con widgets de terceros es fácil.
  • Las directivas angulares son más adecuadas para escribir sus propios widgets pero son más potentes al mismo tiempo.
+0

También tenga en cuenta que el sitio de Angular está actualmente en un flujo por lo que una gran cantidad de enlaces de las discusiones se rompen. Me encantaría darte un ejemplo más específico para la integración angular con jQuery o Ext JS, o alguna otra biblioteca, pero no puedo encontrar nada :( –

+1

Un grupo derivado de angularjs llamado angular-ui (del cual soy un member) está en proceso de crear widgets angulares, envolviendo jqueryui y twitter bootstrap plugins. Está en etapas tempranas y necesitamos acelerar hasta el recientemente lanzado 1.0 de angularjs. Es cierto que hay más complejidad con el uso de directivas angulares Las fortalezas de Angular son numerosas, el mayor obstáculo para la mayoría es notificar a los angulares que el modelo ha cambiado para que pueda reflejarse en la vista. –

+0

@DanDoyon La biblioteca Angular-ui es útil, sin duda, pero también falta en muchas áreas. Para responder a la pregunta del OP, no es posible integrar Angular en una aplicación existente. Integrar Knockout es. Angular es todo o nada, Knockout no lo es. –

Cuestiones relacionadas