質問

backbone.jsを使用して、サーバーからアイテムを取得した後、コレクションで簡単なget()を実行しようとします。

フェッチは正常に動作しているようです。ただし、コレクションからIDでアイテムを取得しようとすると、モデルではなく未定義の予期しない結果が得られます。

これが私のバックボーンアイテムコードです:

  Model.Scenario = Backbone.Model.extend({

    defaults: function() {
      return {
        title: 'Scenario',
        answer: null,
      };
    }

  });

  Collection.Scenarios = Backbone.Collection.extend({

    model: Model.Scenario,

    url: "data.php",


  });

次に、ルーターメソッドでOBJ作成/フェッチを使用します。

 var Router = new (Backbone.Router.extend({

    routes: {
      ":id"    : "page",
      "" : "page"
    },

    initialize: function() {
      _.bindAll(this, 'page');
      this.scenarios = new Collection.Scenarios();
      this.scenarios.fetch();
      console.log(this.scenarios);
      console.log(this.scenarios.get(1));
      console.log(this.scenarios.get(2));

      Backbone.history.start();
    },

  }))();

最後に、デバッガーにログインしているものは次のとおりです(コレクションが埋め込まれているのを見ることができます):

child
  _byCid: Object
  _byId: Object
    1: child
    2: child
    3: child
    4: child
    7: child
    10: child
    11: child
    12: child
    13: child
    14: child
    15: child
    16: child
    17: child
    18: child
    19: child
    20: child
    21: child
    22: child
    23: child
    26: child
    27: child
    28: child
  __proto__: Object
  length: 22
  models: Array[22]
  __proto__: ctor

 undefined  //first call to get(id)
 undefined  //2nd call to get(id)

私は困惑しています。長い投稿で申し訳ありませんが、私が欠けているものについての洞察に感謝します。ありがとう。

役に立ちましたか?

解決

私の最初の考えは、fetch()が.get()を実行するまでに返されていないということです。

しかし、あなたが投稿したことがまさに起こっていることである場合、最初のConsole.log(this.scenarios)がロードされていることを示しています。

とにかく、Console.logsを成功に入れようとすることをお勧めします。それが問題ではないことを確認するために。

私の2番目の考えは、モデルのIDが正しく設定されていないということです。

backbone.modelは、モデルのIDとしてプロパティ「ID」を使用するデフォルトで、collection.get(ID)が渡されたIDでモデルを返します。

それで、data.phpからの応答にはIDプロパティがありますか?

代わりに試してみてください:

 var Router = new (Backbone.Router.extend({

    routes: {
      ":id"    : "page",
      "" : "page"
    },

    initialize: function() {
      _.bindAll(this, 'page');
      this.scenarios = new Collection.Scenarios();
      this.scenarios.fetch({
        success: function(coll, resp) {
          console.log(coll);
          console.log(coll.first());
          console.log(coll.last());
        });
      Backbone.history.start();
    },

  }))();

最初と最後のモデルを返し、IDの問題を写真から取り出します。

それが機能する場合、モデルはIDプロパティ(coll.first()。ID)に何を示しますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top