me gusta mucho la espina dorsal, pero estoy teniendo el momento más difícil hacer lo que parece ser cosas simples. Agradezco cualquier ayuda con el siguiente ejemplo.Backbone.js manejo de atributos que son matrices
que tienen un modelo, criterios, que quiero usar para almacenar el estado de algunos artículos en mi interfaz de usuario. hay un par de atributos simples, y un atributo que es una matriz de ID utilizados para almacenar los ID de las etiquetas que el usuario ha seleccionado en la interfaz de usuario.
Por lo tanto, crear una nueva instancia. Agregué algunos elementos a la matriz de etiquetas. Entonces, quiero comenzar de nuevo, crear una nueva instancia, asignada a la misma variable. Sin embargo, mi matriz de etiquetas continúa conservando la información que agregué como parte de la primera instancia de Criteria.
me han documentado el caso de prueba a continuación.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script src="Scripts/Libraries/jquery-1.6.1.js" type="text/javascript"></script>
<script src="Scripts/Libraries/underscore.js" type="text/javascript"></script>
<script src="Scripts/Libraries/backbone.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(function() {
// Simple model to hold some state about my UI.
var Criteria = Backbone.Model.extend({
defaults: {
"status": "Normal",
"priority": "Normal",
"tags": new Array()
}
});
// Create new criteria.
window.criteria = new Criteria();
// The length of the tags array should be 0. PASSES
console.log("Expect 0: Actual " + window.criteria.get("tags").length);
// Add a tag id to the tags array.
window.criteria.get("tags").push(5); // Tag with ID of 5.
// The length of the tags array should be 1. PASSES
console.log("Expect 1: Actual " + window.criteria.get("tags").length);
// Create a new instance of criteria.
window.criteria = new Criteria();
// The length of the tags array should be 0. FAILS
// CONFUSED. I thought this is now a new instance with a new set of attributes.
// Why does the tags collection still have an item in it.
console.log("Expect 0: Actual " + window.criteria.get("tags").length);
// OK. So, I will call the clear method on the model. This is supposed to remove all attributes
// from the model.
// Then, I will create it again.
window.criteria.clear();
window.criteria = new Criteria();
// The length of the tags array should be 0. FAILS. Still 1.
console.log("Expect 0: Actual " + window.criteria.get("tags").length);
// ARGH!
console.log("HELP!");
});
</script>
</head>
<body>
<h1>Test</h1>
<p>Backbone test page.</p>
</body>
</html>
¿Estoy lejos de la marca aquí? ¿Estoy tratando de usar Backbone para cosas que no fue intencional? ¿O me falta algo más general en la programación javascript OO?
P.S. Originalmente utilicé una colección de etiquetas Backbone, pero eso presentaba un conjunto diferente de problemas relacionados con tener un modelo Tag referenciado en múltiples colecciones y cómo el método remove de Backbone desata la referencia de "colección" cuando un elemento se elimina de cualquier colección. Otro día, otro problema.
Hola Kevin, tal vez usted podría cambiar su respuesta aceptada a la de abajo? Que es mucho más legible y el enfoque recomendado. La respuesta aceptada es solo una idea inflada de lo mismo de todos modos. Gracias. – SuperDuperApps