1

コレクションで get backbone メソッドを使用していますが、同じファイル (ルーター) では、関数では機能しますが、他の関数では機能しません。機能しない関数の下

     var Models = {};
       var AppRouter = Backbone.Router.extend({

    routes: {
        "": "home",
        "user/:id":"userDetails",
        "settings":"settings",//mettere id dell utente loggato
        "friends":"friends",
        "mailbox":"mailbox",
        "landscape":"landscape",
        "gestione_richieste_amic":"gestione_richieste_amic"
    },

    friends: function(){
     console.log("friend_router");
     var self=this;
      Models.utenti = new Usercollection();
      Models.utenti.fetch({
      success: function(object) {
     console.log(object);


     var view=new FriendsView({model:object}); 
    self.changePage(view);

     },
     error: function(amici, error) {

    }
    }); 

    console.log(Models.utenti);
    var cur_user=Parse.User.current().id;

    console.log(Models.utenti.get(cur_user));<--undefined, don't works here
    console.log(cur_user); 






   }   ,
4

1 に答える 1

1

この理由は(fetch メソッド)の非同期性にあります。Ajax

コンソールにログを記録する行は、コレクションがフェッチされる前に実行されます。したがって、エラーが表示されます。

最初のオプション- エラーを解決するには、ログをsuccessハンドラー内に移動します

friends: function () {
         console.log("friend_router");
         var self = this,
             Models.utenti = new Usercollection();
         Models.utenti.fetch({
             success: function (object) {
                 console.log(object);
                 var view = new FriendsView({
                     model: object
                 });
                 self.changePage(view);
                 console.log(Models.utenti);
                 var cur_user = Parse.User.current().id;

                 console.log(Models.utenti.get(cur_user));
                console.log(cur_user); 
             },
             error: function (amici, error) {

             }
         });
     },

2番目のオプション- あなたが取るかもしれないのはsync、コレクションにイベントをバインドすることです..

initialize: function () {
     this.Models.utenti = new Usercollection();
     this.listenTo(this.Models.utenti, 'sync', this.logCollection);
     _.bindAll(this, 'logCollection');
 },
 logCollection: function () {
     console.log(this.Models.utenti);
     var cur_user = Parse.User.current().id;

     console.log(this.Models.utenti.get(cur_user)); 
    console.log(cur_user); 
 },
 friends: function () {
     console.log("friend_router");
     var self = this;
     this.Models.utenti.fetch({
         success: function (object) {
             console.log(object);
             var view = new FriendsView({
                 model: object
             });
             self.changePage(view);
         },
         error: function (amici, error) {

         }
     });
 },
于 2013-07-31T19:58:51.780 に答える