Necesito disparar un evento cada vez que se actualiza/cambia una propiedad para mantener los elementos dom sincronizados con los valores de propiedad en el modelo (estoy usando la herencia simple de john resig http://ejohn.org/blog/simple-javascript-inheritance/). ¿Es posible hacerlo de una manera cruzada? Me parece que si pudiera ajustar cualquier función que use js para establecer propiedades y hacer que desencadene un evento, que podría funcionar, no estoy seguro de cómo hacerlo.javascript property change event
Respuesta
JavaScript no usa una función para establecer propiedades. Son solo variables, y su configuración no requiere envoltorios elaborados.
Usted puede utilizar una función para establecer la propiedad, sin embargo - el mismo tipo de un acuerdo de captador/definidor puede utilizar en un idioma que admiten los datos privados en las clases. De esa forma, su función podría ejecutar fácilmente otras funciones que se hayan registrado como devoluciones de llamada. Usando jQuery, incluso puedes manejarlos como eventos.
$(yourObject).bind('some-event-you-made-up', function() {
// This code will run whenever some-event-you-made-up is triggered on yourObject
});
// ...
$(yourObject).trigger('some-event-you-made-up');
Tal vez ya resuelto su problema con jQuery bind/gatillo, pero quería decir que estoy construyendo un seguimiento de cambios y (en la parte superior de eso) Entidad que modela el marco Javascript, llamado "tienda" que resuelve el problema que expone, sin requerir ninguna sintaxis especial en la manipulación de objetos, su código abierto y alojado en:
https://github.com/benjamine/tent
está documentado con jsdoc y la unidad probada con js-piloto de pruebas.
puede utilizar el módulo de seguimiento de cambios de esta manera:
var myobject = { name: 'john', age: 34 };
// add a change handler that shows changes on alert dialogs
tent.changes.bind(myobject, function(change) {
alert('myobject property '+change.data.propertyName+' changed!');
});
myobject.name = 'charly'; // gets notified on an alert dialog
funciona con matriz cambia también (añade, elimina). Además, puede usar Contextos de "Entidad" para mantener un conjunto de cambios de todos los cambios detectados (elementos AGREGADOS, SUPRIMIDOS o MODIFICADOS) agrupados en colecciones, agregar y eliminar cascadas, mantener sincronizadas las propiedades inversas, rastrear 1 a 1, 1 a N y relaciones-N-to-M, etc.
este es un marco muy interesante. –
usted podría intentar Javascript Property Events (jpe.js)
me encontré con un problema similar, y terminó escribiendo una función de sobrecarga para Object.defineProperty que agrega controladores de eventos a las propiedades. También proporciona verificación de tipos (js-base-types) y almacena su valor internamente, evitando cambios no deseados.
Muestra de defineProperty normales:
Object.defineProperty(document, "property", {
get:function(){return myProperty},
set:function(value){myProperty = value},
})
var myProperty = false;
Muestra de propiedad con onchange evento:
Object.defineProperty(document, "property", {
default:false,
get:function(){},
set:function(value){},
onchange:function(event){console.info(event)}
})
me sorprendió ver un evento de "cambio" allí, pero solo más tarde vi que es un marco jaja –
defineProperty Objeto/defineProperties hace el truco. Aquí va un código simple. He construido algunos marcos de unión basados en esos datos, y se puede volver muy compleja, pero para el ejercicio de su siguiente manera:
var oScope = {
$privateScope:{},
notify:function(sPropertyPath){
console.log(sPropertyPath,"changed");
}
};
Object.defineProperties(oScope,{
myPropertyA:{
get:function(){
return oScope.$privateScope.myPropertyA
},
set:function(oValue){
oScope.$privateScope.myPropertyA = oValue;
oScope.notify("myPropertyA");
}
}
});
oScope.myPropertyA = "Some Value";
//console will log: myPropertyA changed
- 1. CSS Property Change Listener
- 2. iframe contents change event?
- 3. jQuery textbox change event
- 4. WPF MVVM Property Change Animation
- 5. html element content change event
- 6. jQuery valor change event delay
- 7. jquery hover/change css property help
- 8. jQuery change event llamado dos veces
- 9. Seleccione Option Change DropdownList C# ASP.NET Fire Event
- 10. javascript event-loop pregunta
- 11. javascript event e.which?
- 12. JavaScript Event Terminology
- 13. javascript change form onsubmit dynamically
- 14. Javascript: Cómo interceptar window.location change
- 15. JavaScript Event Delegation code organization
- 16. javascript event missing after html reset
- 17. javascript scroll event para iPhone/iPad?
- 18. capture paste event/html pegado - Javascript
- 19. Javascript OpenLayers before zoom event listener
- 20. javascript 'deviceorientation' event - ¿Qué sensores mide?
- 21. javascript resize event en scroll - mobile
- 22. change event on select with knockout binding, ¿cómo puedo saber si es un cambio real
- 23. jQuery change event en <select> no activada en IE
- 24. jQuery is attr update on checkbox is not trigger change event
- 25. Rails change change sequence or order
- 26. @property @synthesize
- 27. jquery.ui.spinner change
- 28. gwt textbox add change handler
- 29. Cambiar NSFetchedResultsController en SegmentedControl change
- 30. Fire Javascript Event Cuando un DIV está en View
En realidad, es posible tener "captador" y funciones "setter" de las propiedades del objeto en el Javascript extendido por Mozilla. – Pointy
O en ECMAScript 5. – casablanca
El problema es que el objeto que quiero escuchar para el evento no es un objeto jquery, solo un objeto genérico que se almacena en el objeto de datos de objetos jquery. No sé cómo vincular un evento. – joshontheweb