0

私は parse.com からのフェッチによって作成され、ビューによってレンダリングされたユーザーリストを持っています。人々がアイテムリストをクリックすると、オブジェクト ID を URL に挿入しました。ルーターで、コレクションからフェッチし、ビューを呼び出してレンダリングする関数「ホーム」を作成しました。関数「userdetails」は、url のビューでオブジェクト ID の前の挿入をキャッチし、それを使用してコレクションから取得します。問題は、コレクションをこの関数 userdetails に渡すにはどうすればよいですか?別のフェッチを行いたくないのです。

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

    var page=new Homelistuser({model:object}); 
    self.changePage(page);

     },
     error: function(amici, error) {
// The collection could not be retrieved.
    }
    }); 


    },


 userDetails: function (objectId) {

     HERE I WANNA USE OBJECTID TO MAKE A GET FROM COLLECTION FETCHED IN HOME
  },   
4

2 に答える 2

0

@abritez が述べたように、これはおそらくスコープの問題です。つまり、userDetails メソッドはインスタンス化されたコレクションにアクセスできません。@abritez のソリューションはこれを解決しますが、ユーザーがページを更新したりルートに直接アクセスしたりすると、コレクションは読み込まれません。

コレクションが両方のルート間で使用される場合は、実行時にコレクションを取得し、準備が整ったときにリスナーを使用することを検討してください。

var Models = {};
Models.utenti = new Usercollection();
Models.utenti.fetch();
var AppRouter = Backbone.Router.extend({
  home: function() {
    var utentiLoaded = function(object) {
      var page = new Homelistuser({model:object}); 
      this.changePage(page);
    }

    this.listenTo(Models.utenti, 'reset', utentiLoaded);
    this.listenTo(Models.utenti, 'error', function(amici, error) {
      // The collection could not be retrieved.
    });

    if (Models.utenti.any()) {
      utentiLoaded(Models.utenti);
    }
  },

  userDetails: function(objectId) {
    var utentiLoaded = function(object) {
    }

    this.listenTo(Models.utenti, 'reset', utentiLoaded);
    this.listenTo(Models.utenti, 'error', function(amici, error) {
      // The collection could not be retrieved.
    });

    if (Models.utenti.any()) {
      utentiLoaded(Models.utenti);
    }
  }
});
于 2013-05-28T20:41:15.793 に答える
0

おそらくスコーピングの問題のようです。これを試して

var Models = {};
var AppRouter = Backbone.Router.extend({
home: function() {
       var self=this;
           console.log("inrouterhome");               
           Models.utenti = new Usercollection();
           Models.utenti.fetch({
           success: function(object) {

              var page=new Homelistuser({model:object}); 
              self.changePage(page);

           },
              error: function(amici, error) {


                 // The collection could not be retrieved.

            }
     });
  },
  userDetails: function (objectId) {

    //Models.utenti should exist as long as home came first,
    // may want to write a condition that check to see if it exists and if not do fetch.
  }

});
于 2013-05-28T16:45:23.093 に答える