Передать значение Dynami c в параметры класса - PullRequest
1 голос
/ 06 апреля 2020

У меня есть переменная, которая меняет свое значение при клике. Я также передаю эту переменную в параметры класса. В зависимости от этого значения некоторые функции в классе могут возвращать разные значения.

Однако я знаю, что экземпляр вызывается только один раз, и, несмотря на изменение значения переменной, функции внутри класса не вызываются, следовательно, ничего не происходит на странице. Вот мой код:

класс. js

export default class MyClass {
    constructor(params, uniqueId) {
        this.params = {
            ...params,
        };
        ...
        this.init();
     }
       init() {
            doSomethingHere();
       }
       doSomethingHere() {
            alert(this.params.myMode);
       };
}

app.hbs

<button class="foo">foo</button>
<button class="bar">bar</button>

app. js

import MyClass from './components/MyClass';

const myMode = 'foo';

const myParams = {
  myMode,
};

new MyClass(myParams);

// by clicking buttons I can change myMode's value
document.querySelector('.foo').addEventListener('click', () => changeMapMode('foo'));
document.querySelector('.bar').addEventListener('click', () => changeMapMode('bar'));

function changeMode(value) {
    myMode = value;
}

1 Ответ

1 голос
/ 06 апреля 2020

Если вы используете объект вместо строки, это может быть решено. Например:

приложение. js

import MyClass from './components/MyClass';

const myParams = {
  mode: 'foo',
};

new MyClass(myParams);

// by clicking buttons I can change myMode's value
document.querySelector('.foo').addEventListener('click', () => changeMapMode('foo'));
document.querySelector('.bar').addEventListener('click', () => changeMapMode('bar'));

function changeMode(value) {
    myParams.mode = value;
}

класс. js

//...
constructor(params, uniqueId) {
   this.params = params;
   //...
}

РЕДАКТИРОВАТЬ:

Если вы хотите что-то сделать, когда меняется mode, вам необходимо добавить слушателей или управлять состояниями вручную. Или вызывайте функции непосредственно сразу после изменения состояния.

Например:

app. js

const myClass = new MyClass(myParams);
myClass.doSomethingHere();


function changeMode(value) {
  myParams.mode = value;
  myClass.doSomethingHere();
}
...