The difference between Ember.get () and this.get ()

I am new to Ember and this confuses me in the difference between this.get()and Ember.get(). Can someone explain them briefly?

+10
source share
3 answers

Welcome to Amber ;-)

Each object that extends the Ember Observable mixin supports a method get()(among others).

When you call this.get(), it thisshould reference such an object (Route, Controller, Component, your own class, which extends Ember.Object, etc.). Calling get()for a simple object may cause an error. Let me show the difference:

const emberObjectInstance = Ember.Object.create({
 name: 'Bala'
});

emberObjectInstance.get('name'); // returns 'Bala'

const plainObject = { name: 'Bala'};
plainObject.get('name'); // causes a failure since get() is not a function

However, use Ember.get()in both cases:

Ember.get(emberObjectInstance, 'name'); // returns 'Bala'
Ember.get(plainObject, 'name');         // returns 'Bala', too

import { get } from '@ember/object';

get(emberObjectInstance, 'name'); // returns 'Bala'
get(plainObject, 'name');         // returns 'Bala', too

: , get() ( - , ..), .

, Ember.get() , , , . setupController() setupController() setupController().

// some route:
setupController(controller, model){
    this._super(...arguments);

    const name = Ember.get(model, 'name'); // ***

    controller.set('isNamePresentOnSetup', Ember.isPresent(name));
}

// in my unit tests I can use plain object:
...
const modelMock = { name: 'Bala' }; // plain object is enough because I use Ember.get instead of model.get() (see ***)?
const controllerMock = Ember.Object.create(); // has to be Ember.Object since I use controller.set() within setupController()

subject.setupController(controllerMock, modelMock);
assert.ok(controllerMock.get('isNamePresentOnSetup'), "property 'isNamePresentOnSetup' set up correctly if model name is present");
...

Ember.set(controller, 'isNamePresentOnSetup', Ember.isPresent(name)) setupController().

, , Ember, , Ember . Ember:

https://guides.emberjs.com/v2.9.0/object-model/

https://guides.emberjs.com/v2.9.0/object-model/computed-properties/

https://guides.emberjs.com/v2.9.0/object-model/reopening-classes-and-instances/

: get() , POJO. , objectInstance.get('abc') b undefined undefined. objectInstance.abc b undefined, .

+21

. foo.get('bar') Ember.get(foo, 'bar'). , foo.get Ember.Object, .get() Ember. Ember.get() ember. Ember Objects Ember.get(foo, 'bar') foo.get('bar'), foo['bar'].

+4

, Ember.get() this.get() , Ember> = 3.1, 2018 . ES5. Ember 3.1. RFC 281.

, ES5: es5-getter-ember-codemod. ember-cli-update.

, Ember.get() this.get() . , , :

, get:

  • , . , this.get('abc'), b , . this.abc, b , .
  • unknownProperty, get. ES5 unknownProperty .
  • Ember Data - API. - Ember, - , - , get .

Please note that there is a special case when using . It provides its own implementation . Therefore , they have different results if . For more information on this, see the documentation for ember-changeset . ember-changeset.get()Ember.get(this, 'value')this.get('value')this ember-changeset

0
source

Source: https://habr.com/ru/post/1674373/


All Articles