2

私はParse.comでアプリを作成しており、アプリを通過するさまざまな定数と値を格納する「AppState」オブジェクトを定義しました(PHPセッションに少し似ています)。

ある時点で、AppStateオブジェクトから値を読み取ろうとしていますが、設定されているように見えますが、値が返されません。

AppStateは次のように定義されます。

var AppState = Parse.Object.extend("AppState", {
    defaults: {
        folderShown: '',
        folderSpecial: 'all',
        showCaption: false
    }
});

次に、アプリを開始する必要があります。

var state = new AppState;
new AppRouter;
new AppView;

AppRouterで、「route」の値を設定しています。

var AppRouter = Parse.Router.extend({
    routes: {
        "viewPage/:object_id": "viewPage",
    },
    initialize: function(options) {
    },
    viewPage:   function(object_id) {
        state.set("currentPage", object_id);
        state.set("route", "view");
    }
});

アプリビューでは、私は持っています:

var AppView = Parse.View.extend({
  initialize:   function() {
      this.render();
  },
  render:  function() {
    console.log(state);
    console.log(state.get('route'));
  }
});

最初のコンソールログには、属性「route」が「view」に設定された状態が表示されます。

attributes: Object
  folderShown: ""
  folderSpecial: "all"
  route: "view"
  showCaption: false

2番目のコンソールログには「未定義」と表示されます。

'folderSpecial'などのデフォルト属性の1つを取得すると、正しい値が読み取られます。

私は何が間違っているのですか?

4

2 に答える 2

1

ルーターで定義されたルートは、Backbone.history.start()が呼び出されたときに評価されます。http://backbonejs.org/#Routerから

ページの読み込み中、アプリケーションがすべてのルーターの作成を完了した後、必ず Backbone.history.start() または Backbone.history.start({pushState: true}) を呼び出して初期 URL をルーティングしてください。

これは、状態オブジェクトが呼び出されたときにのみ更新されることを意味しますBackbone.history.start()。この場合、ビューが初期化された後です。

Backbone.history.start前に電話new AppViewすると問題が解決するはずです。

問題をシミュレートするフィドル: http://jsfiddle.net/nikoshr/LWh2P/ および修正版: http://jsfiddle.net/nikoshr/LWh2P/1/

于 2012-10-03T11:25:46.747 に答える
0

関係があることを教えてくれたnikoshrに感謝しますParse.history.start()。新しい AppView が問題を解決する前にそれを移動します。

于 2012-10-03T11:10:44.047 に答える