{"action":"created","issue":{"url":"https://api.github.com/repos/phetsims/axon/issues/70","labels_url":"https://api.github.com/repos/phetsims/axon/issues/70/labels{/name}","comments_url":"https://api.github.com/repos/phetsims/axon/issues/70/comments","events_url":"https://api.github.com/repos/phetsims/axon/issues/70/events","html_url":"https://github.com/phetsims/axon/issues/70","id":105932438,"number":70,"title":"Unify event and listener APIs and implementations","user":{"login":"samreid","id":679486,"avatar_url":"https://avatars.githubusercontent.com/u/679486?v=3","gravatar_id":"","url":"https://api.github.com/users/samreid","html_url":"https://github.com/samreid","followers_url":"https://api.github.com/users/samreid/followers","following_url":"https://api.github.com/users/samreid/following{/other_user}","gists_url":"https://api.github.com/users/samreid/gists{/gist_id}","starred_url":"https://api.github.com/users/samreid/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/samreid/subscriptions","organizations_url":"https://api.github.com/users/samreid/orgs","repos_url":"https://api.github.com/users/samreid/repos","events_url":"https://api.github.com/users/samreid/events{/privacy}","received_events_url":"https://api.github.com/users/samreid/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"samreid","id":679486,"avatar_url":"https://avatars.githubusercontent.com/u/679486?v=3","gravatar_id":"","url":"https://api.github.com/users/samreid","html_url":"https://github.com/samreid","followers_url":"https://api.github.com/users/samreid/followers","following_url":"https://api.github.com/users/samreid/following{/other_user}","gists_url":"https://api.github.com/users/samreid/gists{/gist_id}","starred_url":"https://api.github.com/users/samreid/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/samreid/subscriptions","organizations_url":"https://api.github.com/users/samreid/orgs","repos_url":"https://api.github.com/users/samreid/repos","events_url":"https://api.github.com/users/samreid/events{/privacy}","received_events_url":"https://api.github.com/users/samreid/received_events","type":"User","site_admin":false},"milestone":null,"comments":14,"created_at":"2015-09-11T02:20:04Z","updated_at":"2015-09-23T02:08:28Z","closed_at":null,"body":"Currently axon has three event types:\r\n\r\n1. Property.link\r\n2. Events.on\r\n3. ObservableArray.addItemAddedListener\r\n\r\nWhile these are indeed three different kinds of events, there is no reason that they must be implemented in such different ways.  Why not listen to a Property with \r\n\r\n```js\r\nmyProperty.on('change',function(){});\r\n```\r\n\r\nor listen to events with:\r\n```js\r\nmyEvents.visibleChannel.link(function(){});\r\n```\r\n\r\nor listen to observable array methods like:\r\n```js\r\nmyObservableArray.on('itemAdded',function(newItem){});\r\n```\r\n\r\nUnifying these APIs may lead to a more consistent development experience.  Unifying the implementations would also be possible, and lead to a more uniform way to deal with issues like trigger('callbacksStarted') and volatile vs safe array copying."},"comment":{"url":"https://api.github.com/repos/phetsims/axon/issues/comments/142472065","html_url":"https://github.com/phetsims/axon/issues/70#issuecomment-142472065","issue_url":"https://api.github.com/repos/phetsims/axon/issues/70","id":142472065,"user":{"login":"pixelzoom","id":3046552,"avatar_url":"https://avatars.githubusercontent.com/u/3046552?v=3","gravatar_id":"","url":"https://api.github.com/users/pixelzoom","html_url":"https://github.com/pixelzoom","followers_url":"https://api.github.com/users/pixelzoom/followers","following_url":"https://api.github.com/users/pixelzoom/following{/other_user}","gists_url":"https://api.github.com/users/pixelzoom/gists{/gist_id}","starred_url":"https://api.github.com/users/pixelzoom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pixelzoom/subscriptions","organizations_url":"https://api.github.com/users/pixelzoom/orgs","repos_url":"https://api.github.com/users/pixelzoom/repos","events_url":"https://api.github.com/users/pixelzoom/events{/privacy}","received_events_url":"https://api.github.com/users/pixelzoom/received_events","type":"User","site_admin":false},"created_at":"2015-09-23T02:08:28Z","updated_at":"2015-09-23T02:08:28Z","body":"I think this is a great topic, and that we should continue to discuss and brainstorm. But are you thinking about making changes to axon while we're trying to meet the S2015R milestone?  Imo, we should be minimizing changes to common code, except where we need to make progress on data collection."}}