2015-05-21 95 views
1

我在ExtJS的5.1以下類:從這裏訪問靜態?

Ext.define('Web.view.guard.apps.conexao.Conexao', { 
    extend: 'Web.view.guard.apps.App', 

    width: 400, 
    height: 600, 

    statics: { 
     title: 'Conexão', 
     icon: 'https://upload.wikimedia.org/wikipedia/commons/a/ac/Approve_icon.svg' 
    }, 
}); 

我想從實例上下文訪問靜態屬性,如title = this.statics.title或類似這樣的東西,從控制器或視圖本身,但我不能在文檔中找到一種方法。

我通過Google找到方法statics()的引用,但它不起作用,this.statics().title返回null,儘管statics()方法確實存在。

這怎麼可能?

回答

3

簡單的方法是

Web.view.guard.apps.conexao.Conexao.title 

this.selfWeb.view.guard.apps.conexao.Conexao一個參考,所以你可以使用this.self.title。見http://docs.sencha.com/extjs/5.1/5.1.1-apidocs/#!/api/Ext.Base-property-selfhttps://fiddle.sencha.com/#fiddle/na0

Ext.define('Web.view.guard.apps.conexao.Conexao', { 
    extend: 'Web.view.guard.apps.App', 

    width: 400, 
    height: 600, 

    statics: { 
     title: 'Conexão', 
     icon: 'https://upload.wikimedia.org/wikipedia/commons/a/ac/Approve_icon.svg' 
    }, 

    myInstanceMethod: function() { 
     console.log(this.self.title); 
    } 
}); 
var conn = new Web.view.guard.apps.conexao.Conexao(); 
conn.myInstanceMethod(); 
// 'Conexão' 
// 'https://upload.wikimedia.org/wikipedia/commons/a/ac/Approve_icon.svg' 

如果你希望它是子類訪問,一定要使用inheritableStatics: {}代替。

+1

或'this.self.title'。 –

+1

@CD ..我最初的回答是不正確的,因爲Ext實際上覆蓋了對象的'constructor'屬性(違反了JavaScript約定,即實例有一個屬性,稱爲構造函數,指向「類」本身)。 'constructor'指向Ext最終從真正的構造函數調用的函數(您可以將對象作爲參數傳遞給Ext.define,或者爲您創建默認構造函數)。謝謝你保持誠實。見https://fiddle.sencha.com/#fiddle/na0 –

+0

你的小提琴測試是驚人的!感謝那!很好的答案。 –