backbone.js 无法获取www.example.com中的属性Parse.com

q8l4jmvw  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(130)

我在www.example.com中编写了一个应用程序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

第二个控制台日志显示“未定义”。
如果我得到一个默认属性,如“folderSpecial',它将读取正确的值。
我做错了什么?

46qrfjad

46qrfjad1#

当调用Backbone.history.start()时,将评估路由器中定义的路由。来自http://backbonejs.org/#Router
在页面加载过程中,在应用程序完成创建所有路由器之后,请确保调用Backbone.history.start()或Backbone.history.start({pushState:true})来路由初始URL。
这意味着只有在调用Backbone.history.start()时才会更新状态对象:在您的情况下,是在初始化视图之后。
new AppView之前调用Backbone.history.start应该可以解决您的问题。
模拟您的问题的Fiddle:http://jsfiddle.net/nikoshr/LWh2P/和修改版本:http://jsfiddle.net/nikoshr/LWh2P/1/

8zzbczxx

8zzbczxx2#

感谢nikoshr向我透露这与Parse.history.start()有关。将其移到新的AppView之前已经解决了这个问题。

相关问题