60 votes

nouvelle colonne vertébrale.Modèle() par rapport à l'épine Dorsale.De modèle.extend()

Je suis nouveau sur JS et de la colonne vertébrale

Quelle est la différence entre ces?

TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })

77voto

Daniele B Points 2089

Il y a une différence fondamentale, peut être décrit comme "la différence entre le projet d'une maison et la maison en elle-même".

Pour les programmeurs experts, je voudrais juste dire que la "nouvelle colonne vertébrale.Modèle" renvoie une instance de l'objet, mais "l'épine Dorsale.De modèle.étendre" renvoie une fonction constructeur

D'ABORD: un nouvel objet (c'est à dire La maison)

TestModel = new Backbone.Model({ title: "test title" });

vous créez un nouvel Objet dont la structure (méthodes et variables) ont été définis ailleurs. L'objet peut être considéré comme "tous les non-autochtones éléments" d'une langue, où, pour des "indigènes de l'élément", je veux dire des types de base tels que les entiers, caractères, etc.

Dans les accolades {} vous transmettre la valeur d'une variable ou une méthode. Ceci est appelé, comme Tomasz Nurkiewicz previusly expliqué, un constructeur, car il vous permet de "construire" un nouvel objet dont le modèle a été décrit par ailleurs.

Pour vous donner un exemple connu: vous écrivez

myArray = new Array();

Cela signifie que vous êtes la création d'une nouvelle Matrice, ce qui est un non-natif objet qui a été défini par ailleurs. vous pouvez également écrire:

myArray = new Array([1,2,3,4,5]);

Et il remplit le tableau avec les nombres donnés.

DEUXIÈME: modifier la définition d'un objet existant (c'est à dire le projet de La maison)

avec

TestModel = Backbone.Model.extend({ title: "test title" })

vous dire quelque chose de très simple à votre VM: "l'objet que vous me donner comme valeur par défaut est très gentil, mais je veux mettre en œuvre plus de fonctions/propriétés". Donc, avec le "extend" de la clause de modifier la définition de l'objet de l'ajout ou de la préséance de la méthode/de propriétés.

Exemple: un bel exemple dans backbone.js est donnée par la comparaison de la fonction d'une collection. Lorsque vous étendez l'objet de la définition, "il sera utilisé pour la conservation de la collection dans l'ordre de tri".

Exemple:

myCollection= Backbone.Collection.extend({
    comparator:function(){
       return item.get('name');
       }
    });

EN GÉNÉRAL

Ce que vous êtes censé faire quand 'backboning' (=mise au point à l'aide de backbone.js cadre) est d'étendre l'objet donné (par exemple une Vue):

window.buttonView=Backbone.View.extend({
    btnText:'nothingByDefault',
    myNewMethod:function(){
       //do whatever you want, maybe do something triggered bby an event, for instance
       }
});

et puis l'utiliser ailleurs dans le code, une fois pour chaque bouton que vous souhaitez traiter, includeing dans les accolades toutes les valeurs que vous souhaitez donner à l'objet

[...]
var submitBtn = new buttonView({btnText:"SubmitMe!"}),
var cancelBtn = new buttonView({btnText:"Erase All!"});

....Espérons que cela aide...

14voto

Tomasz Nurkiewicz Points 140462

Dans le second cas TestModel est un constructeur qui vous pouvez utiliser plusieurs fois plus tard pour créer une instance de modèle:

var model = new TestModel();

Cependant en passant title de extend ont un sens différent. Vous devriez probablement utiliser:

var TestModel = Backbone.Model.extend({defaults: { title: "test title" }});

ou passer le modèle des attributs lors de la création d'un objet:

var model = new TestModel({ title: "test title" });

Dans le premier cas, en revanche TestModel est déjà une instance de modèle (d'où il devrait être nommé testModel suivre JavaScript naming convention):

var testModel = new Backbone.Model({ title: "test title" })

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X