getGeoLevelDetails: function(id) {
window.gid = id;
}
我想访问window.gid
函数
renderGeoLevelDetails
renderGeoLevelDetails: function(response, obj){
var id = this.getGeoLevelDetails.gid;
console.log(id);
}
它显示输出为
未捕获的TypeError:无法读取未定义的属性'gid'
答案 0 :(得分:1)
您的方法中存在一些错误。
首先你正在定义一个分配给DOM窗口对象的全局变量,这个函数里面我真的不知道它在哪里被声明。但这在这个阶段并不重要。
第二您希望通过调用上述函数来获取分配给全局变量的值,该函数不返回任何内容。
这里有几个选项:要么将值分配给全局变量(这是一种非常糟糕的做法,无论如何都应该避免)。
更好的方法是简单地返回id
:
getGeoLevelDetails: function(id) {
return id;
}
稍后您可以通过调用renderGeoLevelDetails
函数来获取此ID。
renderGeoLevelDetails: function(response, obj) {
var id = this.getGeoLevelDetails();
}
请注意,只有在同一范围内调用this.getGeoLevelDetails
函数时,这才有效,因为this
是同一对象的实例。
您的代码中有关于此行的另一个重大错误:
this.getGeoLevelDetails.gid;
首先,你的不作为一个函数调用,但作为一个实例变量,期望返回一个全局声明的对象。这就是你得到的原因:
未捕获的TypeError:无法读取未定义的属性'gid'
<强> TL; DR 强>
总而言之,如果您希望将模型中的值传输到视图,可以通过调用视图中的模型来访问它,或者如果您希望在同一视图中获取值,则可以使用所提供的方法上方。
如果上述解决方案都不适合您的需求,您可以采用另一种方法:扩展Backbone对象,然后声明一个接收所需值的对象变量。这样你就可以消除全球污染问题:
示例:强>
Backbone.Details = _.extend({}, Backbone.Router);
Backbone.Details.geoLevel = id;
然后可以从应用程序的任何位置访问此变量:Backbone.Details.geoLevel
。