Backbone.js la Manipulation des Attributs Qui Sont des Tableaux

J'aime vraiment épine Dorsale, mais je suis le plus de temps à faire ce qui semble être des choses simples. J'ai apprécier l'aide de l'exemple suivant.

J'ai un modèle, les Critères, que je veux utiliser pour stocker l'état de certains éléments dans mon INTERFACE. il ya un couple de simples attributs, et un attribut qui est un tableau d'Id utilisé pour stocker les Id des balises que l'utilisateur a sélectionné dans l'INTERFACE utilisateur.

Donc, j'ai créer une nouvelle instance. J'ai ajouter quelques éléments pour les balises de tableau. Alors, je veux repartir de zéro, créer une nouvelle instance, affecté à la même variable. Mais, mes balises de tableau continue à détenir des informations, j'ai ajouté comme une partie de la première instance de Critères.

J'ai documenté les cas de test ci-dessous.

<!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>

Suis-je tout simplement de la marque ici? Suis-je en train d'utiliser l'épine Dorsale de choses qu'il n'a pas été prévu? Ou ai-je raté quelque chose de plus général en javascript programmation OO?

P. S. j'ai d'abord utilisé un Backbone de collecte de tags, mais qui a présenté toute une autre série de questions relatives au fait d'avoir une Étiquette de modèle référencé dans plusieurs collections et comment l'épine Dorsale de la méthode remove unsets la "collection" de référence lorsqu'un élément est supprimé à partir de n'importe quelle collection. Un autre jour, une autre question.

  • Bonjour Kevin, vous pourriez peut-être changer votre accepté de répondre à l'autre en dessous? Ce qui est beaucoup plus lisible et l'approche recommandée. L'on a accepté la réponse est à seulement gonflé idée de la même chose de toute façon. Merci.
InformationsquelleAutor Kevin | 2011-06-22