Журнал изменений в коллекции Backbone.js, моя коллекция не определена - PullRequest
1 голос
/ 27 мая 2011

Эй! Я новичок в Backbone.js, так что это, скорее всего, простой вопрос.

Я хочу console.log моей коллекции друзей каждый раз, когда она меняется. Поэтому я связал all события в коллекции, чтобы вызвать мою функцию logFunction .. но в функции журнала this.friends не определено Почему?

Это мое "приложение":

(function ($) {


       Friend = Backbone.Model.extend({
           //Create a model to hold friend atribute
           name: null
       });


       Friends = Backbone.Collection.extend({

           model: Friend,
           //This is our Friends collection and holds our Friend models
           initialize: function (models, options) {
               this.bind("add", options.view.addFriendLi);
               this.bind("all", options.view.logFriendsCollection);

               //Listen for new additions to the collection and call a view function if so
           }
       });

       window.AppView = Backbone.View.extend({
           el: $("body"),

           initialize: function () {
               this.friends = new Friends(null, { view: this });
           },

           events: {
               "click #add-friend": "showPrompt"
           },


           showPrompt: function () {
               var friend_name = prompt("Who is your friend?");
               var friend_model = new Friend({ "name": friend_name });

               this.friends.add(friend_model);
           },

           addFriendLi: function (model) {
               $("#friends-list").append("<li>" + model.get('name') + "</li>");

           },

           logFriendsCollection: function (args) {
               console.log("Friends", this.friends);
           }

       }); var appview = new AppView;

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

В вашем AppView.initialize вы должны позвонить _.bindAll(this, 'logFriendsCollection'), чтобы связать this с AppView.

0 голосов
/ 27 мая 2011

Я думаю, что когда вы связываете метод logFriendsCollection представления с коллекцией Friend, этот метод также получает контекст коллекции.Поэтому, когда вы ссылаетесь на this в методе, this ссылается на коллекцию, а не на представление.

Я возился с ней по вашей ссылке Fiddler и по коду, который я изменил, чтобы он работалбыло

           logFriendsCollection: function () {
               console.log("Friends", this);
           }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...