En lugar de activar un evento en función de la acción del usuario, ¿puede simplemente escuchar los cambios en un objeto y reaccionar luego?¿Hay alguna forma de controlar los cambios en un objeto?
Respuesta
Bueno, dependiendo del dominio con el que trabaje, puede usar backbone.js - tiene un objeto "modelo" que puede extender y conectarse a devoluciones de llamada que son activadas por eventos automáticamente cuando se cambia el modelo - eso es decir, establece un campo en el modelo y activará automáticamente un evento que puede escuchar. Tienes que definir tus modelos para extender su Modelo, y llamar a una función setter en lugar de establecer propiedades directamente, pero es muy útil, lo recomiendo.
Por razones de claridad, el evento se dispara del modelo en el cambio, por lo que se activa aunque establezca el valor del atributo programáticamente o en la consola.
Puede usar getters y setters ro reaccionar en el cambio de propiedades. John Resig ha escrito excelentes article sobre ellos.
He escrito algo como esto.
https://github.com/jmoyers/mettle
person.on('name.change', function(val){
// 'a new name was committed: Yolanda'
console.log('a new name was committed: ', val)
});
person.name = 'Yolanda';
https://github.com/jmoyers/mettle/blob/master/src/model.coffee
Podría ser un poco mucho que excavar a través de toda la fuente. Aquí hay una explicación:
La clave para mi proyecto son dos conceptos. Una es mantener la pista un conjunto de atributos y crear getters y settes para cada uno usando defineGetter y defineSetter. El segundo es 'subclasificar' EventEmitter y transmitir eventos basados en estos cambios de propiedad en su setter.
La pista muestra cómo configuro getter/setter para un conjunto de claves.
Model.prototype.track = function(keys) {
_.each(keys, __bind(function(key) {
this.tracked.push(key);
this.__defineGetter__(key, __bind(function() {
return this.get(key);
}, this));
return this.__defineSetter__(key, __bind(function(val) {
return this.set(key, val);
}, this));
}, this));
return this;
};
Aquí hay un ejemplo de cómo las transmisiones basadas en un fijador de 'magia':
Model.prototype.set = function(key, val) {
this.attribs[key] = val;
this.emit('change', this.attribs);
type = key + '.change';
this.emit(type, val);
};
Este es un ejemplo simplificado, ya que introduje 'middleware atributo' en la mezcla, pero esto muestra cómo podría emitir un evento de cambio basado en un cambio de propiedad.
- 1. ¿Hay alguna forma de detectar si un objeto está bloqueado?
- 2. ¿Hay alguna forma de exportar un objeto ActiveRecord a seeds.rb?
- 3. ¿Hay alguna forma de imprimir todos los métodos de un objeto en javascript?
- 4. ¿Hay alguna forma de cancelar TabControl.Items.CurrentChanging?
- 5. ¿Hay alguna forma de implementar cambios delta en caliente en un dispositivo Android? [Diga, como JRebel]
- 6. TFS 2010 - ¿Hay alguna forma de recuperar mis cambios después de haber hecho "Deshacer cambios pendientes"?
- 7. ¿Hay alguna forma de multirreproducir un SqlDataReader?
- 8. ¿Hay alguna forma de serializar el objeto linq para Memcached?
- 9. estado de git: ¿hay alguna manera de mostrar los cambios solo en un directorio específico?
- 10. ¿Hay alguna forma de sobrecargar + = en python?
- 11. En groovy, ¿hay alguna forma de comprobar si un objeto tiene un método determinado?
- 12. ¿Hay alguna forma común de verificar en Python si un objeto es cualquier tipo de función?
- 13. ¿Hay alguna manera de controlar el elemento NSMenuItem que se resalta inicialmente al abrir un menú?
- 14. ¿Hay alguna forma de revertir los cambios de la propiedad svn para un archivo sin revertir los cambios al contenido del archivo?
- 15. ¿Hay alguna forma de obtener el recuento actual de ref de un objeto en Python?
- 16. ¿Cómo puedo controlar un directorio de Windows para ver los cambios?
- 17. ¿Hay alguna forma de eliminar un onTouchListener de un objeto de vista?
- 18. ¿Hay alguna forma de obtener un valor de propiedad de un objeto utilizando la clase PropertyPath?
- 19. ¿Hay alguna forma de confirmar los cambios que he realizado en mi checkout de SVN en una rama?
- 20. ¿Hay alguna forma de serializar un objeto de paginación en Django?
- 21. ¿Hay alguna forma de currying en C?
- 22. ¿Hay alguna forma de escuchar los cambios en una tabla de base de datos MySQL usando Java y JDBC?
- 23. ¿Hay alguna manera de controlar Apache con New Relic?
- 24. ¿Hay alguna forma de "hacer" hacerse eco de los comandos
- 25. En Perl, ¿hay alguna forma de atar un alijo?
- 26. ¿Hay alguna forma de anclar un ancla en css?
- 27. ¿Hay alguna forma de usar claves variables en un objeto JavaScript literal?
- 28. ¿Hay alguna forma de extraer/actualizar todos los subrepos?
- 29. ¿Hay alguna forma de consultar los cambios realizados por una actualización materializada de vista materializada en Oracle?
- 30. ¿Hay alguna forma de hacer un condicional before_save?
http://stackoverflow.com/questions/1029241/javascript-object-watch-for-all-browsers –