2011-08-12 26 views
0

我有这个奇怪的问题,我不能让我的头围:在两个范围在同一水平几乎相同的功能表现不同

我有在它3个元素(即是很重要的这个问题)的对象:

base_url: 'http://resttest.******.com/v1/', 
remind_url: function() { console.log(this.base_url); return this.base_url +'/member/passwordreminder/' }, 
login_url: function() { console.log(this.base_url); return this.base_url + '/member/login' }, 

他们看起来像这样的对象中:

app.controllers.login = new Ext.Controller({ 
/** 
* @cfg url 
* Login request URL 
*/ 
base_url: 'http://resttest.******.com/v1/', 
remind_url: function() { console.log(this.base_url); return this.base_url +'/member/passwordreminder/' }, 
login_url: function() { console.log(this.base_url); return this.base_url + '/member/login' }, 

当我调用alerts_url,base_url等于它应该是('http:// resttest。 ** .com/v1 /'),但是当我调用login_url时,base_url未定义。

为什么?

+2

你打电话给他们怎么样? – Nicole

+1

请不要将标签放入问题中。有一个单独的“标签”字段的原因。 – ThiefMaster

回答

1

我猜它与this问题。当base_url未定义时,可能是因为this是全局对象,而不是您的对象。你有什么东西在那里绑定remind_urlthis?例如,在Backbone.js的,普遍的看法在使用Underscore.js这样一行:

_.bindAll(this, 'remind_url, 'login_url', etc); 

将结合那些获得了被称为回调this的所有方法。

要确认这一点,请将console.log(this.base_url)更改为console.log(this),以确定this在这种情况下。

+1

你可能是对的原因,但考虑到其中一个已经工作,这可能不是正确的解决方案。 – Nicole

+0

我还不能回答我自己的问题,因为我的得分太低,但我找到了解决问题的方法:感谢Renesis提出正确的问题! 我已经处理所述呼叫作为一个方法,而不是作为一个功能 - this.login_url =未定义,但this.login_url()不是。 –

+0

@Renesis我确实说过“你有什么东西在那里绑定remin_url到'this'?” - 我想也许那是被绑定的,但另一个不是。但是,这显然不是解决方案! – Skilldrick

0

感谢RENESIS对于提出正确的问题!

,我已处理该呼叫为方法,不是作为一个功能 - this.login_url =未定义,但this.login_url()不是。

相关问题