我在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',它将读取正确的值。
我做错了什么?
2条答案
按热度按时间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/
8zzbczxx2#
感谢nikoshr向我透露这与
Parse.history.start()
有关。将其移到新的AppView之前已经解决了这个问题。