31 votes

Backbone.js - passage d'arguments via des constructeurs

Scénario:
J'ai eu un alert() disant undefined quand j'ai (essayer de) définir l' myVar variable par le Constructeur. Cependant, si j'en commentaire l' myVar qui est vivant à l'intérieur de la mavue, l'alerte puis au lieu dit "Bonjour de l'intérieur", comme on pourrait s'y attendre.

Question:
Est-ce à dire que je ne peut pas définir les paramètres dans le constructeur de la vue à l'exception des dorsales propres paramètres, tels que l' model, collection, el, id, className & tagName?
Manuel: http://documentcloud.github.com/backbone/#View-constructor

Le code:

var myView = Backbone.View.extend({

    //myVar : 'Hello from inside',

    initialize: function() {
        alert(this.myVar);
    }
)};

new myView({myVar: 'Hello from outside'});

57voto

czarchaic Points 3848

Les options passées dans le constructeur sont automatiquement stockées en tant que this.options

 var myView = Backbone.View.extend({

  myVar : 'Hello from inside',

  initialize: function() {
      alert(this.options.myVar);
  }
)};

new myView({myVar: 'Hello from outside'});
 

27voto

Brave Dave Points 802

Comme l'épine dorsale de la version 1.1.0, l' options argument est plus lié automatiquement à l'affichage (voir question 2458 pour la discussion). Maintenant, vous avez besoin pour fixer les options de chaque point de vue manuellement:

MyView = Backbone.View.extend({
    initialize: function(options) {
        _.extend(this, _.pick(options, "myVar", ...));
        // options.myVar is now at this.myVar
    }
});

new MyView({
    myVar: "Hello from outside"
    ...
});

Alternativement, vous pouvez utiliser ce mini plugin auto-joindre une liste blanche des options, comme suit:

MyView = BaseView.extend({
    options : ["myVar", ...] // options.myVar will be copied to this.myVar on initialize
});

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