无法在Parse.com中获取属性

时间:2012-09-19 09:46:38

标签: javascript jquery backbone.js parse-platform

我正在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");
    }
});

在App 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

第二个控制台日志显示“未定义”。

如果我得到一个默认属性,例如'folderSpecial',它会读取正确的值。

我做错了什么?

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

感谢nikoshr向我倾斜,这与Parse.history.start()有关。将其移至新的AppView之前解决了这个问题。

nikoshr,我不知道如何奖励你的赏金,因为你留下了评论而不是答案 - 如果你想重新写下你的评论作为答案,也许我可以做到这一点。

感谢您的帮助,我真的很感激!