2017-04-07 69 views
0

「get」方法也是如此。像get(this, 'agentName')this.get('agentName')返回相同的值。Ember中的set(this,'agentName','John')和this.set('agentName','John')有什麼區別?

在官方ember doc for get method,它表明我們應該通過2值得到。那麼this.get('agentName')如何準確工作?

+1

[Ember.get()和this.get()之間的差異的可能重複(http://stackoverflow.com/questions/40606827/difference-間燼-GET-和這個-獲得) – locks

回答

3

this.get(...)Ember.get(this,...)的快捷方式。然而,它僅適用於燼對象,所以只有Ember.get在純js對象中工作。請參閱this.get(...) implementation

2

Ember中的吸氣和吸氣器已升級爲處理unknown property,computed propertyobservers。沒有多少人會使用setUnknownProperty()鉤子或unknownProperty()鉤子get和set,但是在大多數人的代碼中都有計算屬性和觀察者。更多關於computed propertiesobservers

因此,您的set()this.set()之間的基本區別與您的功能的上下文有關。當你調用set()時,它必須在該範圍中定義或從某處導入以完成任務。 Howeve,與this.set()這裏的範圍是這個。取決於您調用函數的位置,範圍會發生變化。例如,如果您在組件,this指的是component類本身。對於控制器,路由和其他餘燼對象也是如此。如果你有自己的對象,並且它沒有擴展任何的ember類,那麼this仍然可以用它在其他任何JavaScript代碼中的工作。所以它會回落到默認的gettersetter在JavaScript中。

正如您現在已經意識到的那樣,當您調用get(this, 'foo')時,您正在調用JavaScript的getter函數並將當前上下文與要搜索的屬性一起傳遞給它。當你說this.get('foo')你打電話get()Ember.Object類,它可以處理我上面提到的事情。而@Lux提到this.get('foo')被簡化爲調用Ember.get(this,'foo')。

希望這會有所幫助。我鼓勵閱讀Ember guidesAPI docs。 Curent燼和燼數據版本是@ 2.12.0

相關問題