2013-07-31 63 views
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); 






    } , 

回答

1

这样做的原因的异步性质的Ajax(fetch方法)。

在获取集合之前,将执行登录到控制台的行。所以你看到一个错误。

1日选项 - 解决错误日志移动到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) { 

      } 
     }); 
    }, 

第二个选项 - 你可能需要是一个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) { 

     } 
    }); 
}, 
+0

你忘了把你的第二个选项... – Jack

+0

我误读了这个问题.. –

+0

我其实并没有完全读过曲也就是说,我只是评论说你写了“你有两个选择”,然后只写了一个。 – Jack