controls-state icon indicating copy to clipboard operation
controls-state copied to clipboard

Is .onChange function directly on element impossible?

Open marcofugaro opened this issue 4 years ago • 2 comments

Hey, looking at the onChange api:

t.test('emits onChange events', function (t) {
  var c = Controls({foo: 5});

  var called = false;
  c.$path.foo.onChange(function (event) {
    t.equal(event.field, c.$path.foo);
    t.equal(event.name, 'foo');
    t.equal(event.fullPath, 'foo');
    t.equal(event.path, '');
    t.equal(event.oldValue, 5);
    t.equal(event.value, 7);
    called = true;
  });

  c.foo = 7;

  raf(function () {
    t.equal(called, true);
    t.end();
  });
});

It would be actually easier to use if the .onChange function was attached to the foo property directly. But is this even possible to do with a getter?

Another thing, in an onChange listener, almost always, the only property needed is the value. The full event is useful only in the onChanges listener.

So it would be awesome to have an api that works like this:

t.test('emits onChange events', function (t) {
  var c = Controls({foo: 5});

  var called = false;
  c.foo.onChange(function (foo) {
    t.equal(foo, 7);
    called = true;
  });

  c.foo = 7;

  raf(function () {
    t.equal(called, true);
    t.end();
  });
});

What is your opinion?

marcofugaro avatar Jan 09 '20 14:01 marcofugaro

@marcofugaro I just got back to work today after some time away. Will try to address this ASAP when I have a chance, but please feel free to ping me again if I don't respond within another day or two :)

rreusser avatar Jan 13 '20 22:01 rreusser

@rreusser thanks for the two other PRs! What is your opinion about this issue?

marcofugaro avatar Jan 19 '20 22:01 marcofugaro