36 votes

Modèle Backbone.js pour afficher la connexion

Je suis un Backbone.js newbie. J'étais en train de jouer avec elle. Je voudrais savoir si le modèle est lié à la Vue. Dans le todos exemple, je vois dans le addOne méthode, un nouveau point de Vue est créé et associé avec le modèle nouvellement créé et ajouté.

  window.AppView = Backbone.View.extend({
     // view code
     addOne: function(todo) {
          var view = new TodoView({model: todo});
          this.$("#todo-list").append(view.render().el);
     }
  }

Quand j'ai essayé de faire quelque chose de similaire, j'ai une erreur disant "méthode de liaison ne peut pas être trouvé sur undefined".

window.TodoView = Backbone.View.extend({

     initialize: function() {
          _.bindAll(this, 'render', 'close');
          this.model.bind('change', this.render); // I got the error at this place. 
          this.model.view = this;
     }
});

Afin de résoudre ce problème, je suis arrivé à passer le modèle nouvellement créé comme un param pour le constructeur de la vue et je dois this.model = task afin de l'associer.

window.TodoView = Backbone.View.extend({

     initialize: function(task) {
          _.bindAll(this, 'render', 'close');
          this.model = task
          this.model.bind('change', this.render);// now there is no error
          this.model.view = this;
     }
});

window.AppView = Backbone.View.extend({


   insertTask:function(){
        var newTask, newTaskView;
        newTask = new Task(JSON.parse(xhr));
        Tasks.create(newTask);
        newTaskView = new TaskView({ model: newTask });
        $("#todo_list").append(newTaskView.render().el);
        this.input.val('');
}

});

Mais le todos exemple, ne pas avoir quelque chose comme ça. Comment est le nouveau modèle associé avec la nouvelle vue implicitement dans le todos exemple?

Merci

38voto

Factor Mystic Points 12465

Il n'est pas implicite à tous, c'est explicite dans cette ligne, ici:

var view = new TodoView({model: todo});

C'est la création d'un nouveau TodoView vue et l'établissement de ses model de la propriété de l' addOne fonction du seul paramètre (todo, qui est un modèle).

Chaque fois qu'un nouveau modèle est ajouté à l' Todos de la collecte, de l' addOne méthode est appelée avec le nouveau modèle en tant que paramètre.

Todos.bind('add', this.addOne);

Puis, en addOne, un nouveau point de vue est créé pour ce modèle et que la relation est explicitement définie, via {model: todo}. C'est ce que vous êtes absent de votre version du code, je le soupçonne.

Ce que vous semblez essayer de faire est de lier la vue et le modèle dans la vue de la fonction init, et c'est très bien, mais vous êtes sur votre propre si vous faites cela - ce qui signifie que vous devez configurer le modèle <-> voir relation à vous-même (que vous avez résolu en passant par le modèle en tant que paramètre à la vue de la fonction init).

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