「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')
如何準確工作?
「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')
如何準確工作?
this.get(...)
是Ember.get(this,...)
的快捷方式。然而,它僅適用於燼對象,所以只有Ember.get
在純js對象中工作。請參閱this.get(...)
implementation。
Ember中的吸氣和吸氣器已升級爲處理unknown property
,computed property
和observers
。沒有多少人會使用setUnknownProperty()
鉤子或unknownProperty()
鉤子get和set,但是在大多數人的代碼中都有計算屬性和觀察者。更多關於computed properties和observers。
因此,您的set()
和this.set()
之間的基本區別與您的功能的上下文有關。當你調用set()時,它必須在該範圍中定義或從某處導入以完成任務。 Howeve,與this.set()這裏的範圍是這個。取決於您調用函數的位置,範圍會發生變化。例如,如果您在組件,this
指的是component
類本身。對於控制器,路由和其他餘燼對象也是如此。如果你有自己的對象,並且它沒有擴展任何的ember類,那麼this
仍然可以用它在其他任何JavaScript代碼中的工作。所以它會回落到默認的getter和setter在JavaScript中。
正如您現在已經意識到的那樣,當您調用get(this, 'foo')
時,您正在調用JavaScript的getter函數並將當前上下文與要搜索的屬性一起傳遞給它。當你說this.get('foo')
你打電話get()
從Ember.Object
類,它可以處理我上面提到的事情。而@Lux提到this.get('foo')被簡化爲調用Ember.get(this,'foo')。
希望這會有所幫助。我鼓勵閱讀Ember guides和API docs。 Curent燼和燼數據版本是@ 2.12.0
[Ember.get()和this.get()之間的差異的可能重複(http://stackoverflow.com/questions/40606827/difference-間燼-GET-和這個-獲得) – locks