5

私はひどく疲れているか、本当に混乱しています...しかし、よくわかりません... parse.com javascriptのセットアップがあります(バックボーンの代わりに解析を行うだけのbackbone.jsとまったく同じです)。そして、私はモデルとコレクションを持っています、そしてそれはすべてうまくいきます。しかし、toJSON(); は機能せず、console.logに[]を返すだけです...しかし、Chromeコンソールで同じ関数を実行すると、機能し、正しい値を返します。

助けて!?

この素敵なコードはすべて、すぐに使えるドキュメントにラップされています(そして、関連性のない他のコードがいくつかあり、はい、私はそれを実行Parse.initialize()しました。

  var Schedule = Parse.Object.extend({
    className: "schedule"
  });

  var ScheduleList = Parse.Collection.extend({
    model: Schedule
  });

   schedule = new ScheduleList();
      schedulejs3 = schedule.toJSON();
      schedule.query = new Parse.Query(Schedule);
      schedule.query.ascending("date");
      schedule.query.limit('500');
      schedulejs2 = schedule.toJSON();
      schedule.fetch();

      schedulejs = schedule.toJSON();
      console.log(schedulejs,schedulejs2,schedulejs3); <-- All three return []

  var ScheduleView = Parse.View.extend({
    el: $("#schedule-holder"),
    initialize: function() {
      this.schedule = new ScheduleList();
      this.schedule.query = new Parse.Query(Schedule);
      this.schedule.query.ascending("date");
      this.schedule.query.limit('500');

      this.schedule.fetch();

      this.schedule.js = this.schedule.toJSON();

      this.render;
    },

    render: function() {
      var template = Handlebars.compile($("#schedule-item").html());
      $(this.el).html(template({shows: this.schedule.toJSON()}));
      return this;
    }
  });

  var App = new ScheduleView().render();

しかし、Chromeでコンソールを開き、schedule.toJSON();を実行するとします。正しい値を取得します...ご覧のとおり、backbone.jsのセットアップでこれを理解しようとしています(なぜすべてがいたるところにあるのか疑問に思っている場合に備えて)。そして少し注意してください、私はjQueryではなくZepto.jsを使用しています。

ありがとう!

4

1 に答える 1

19

おそらく、実行した時点schedule.toJSON()ではまだ空です。

Collection.fetch()これは非同期メソッドであることを忘れないでください。

この行を変更してみてください:

schedule.fetch();

これで:

schedule.fetch({ success: function() { console.log( "what about now?", schedule.toJSON() ) } };

(おそらく、ハンドラーにアクセスできるように変数を 作成しようとすると、コンテキストの問題が発生します)schedulesuccess

于 2012-08-29T13:17:58.080 に答える