From 601eaec88ed777346ef545dce82ae160dfacaaad Mon Sep 17 00:00:00 2001 From: Alexey Osipenko Date: Sun, 23 Aug 2015 19:45:39 +0300 Subject: [PATCH] Allow to pass DOM object as parent selector. Extend possibility of `findDOMNodes` and as a consequence `mountComponents`. It allows to use it with an element which was inserted to the DOM tree without react.js. Example: ``` $(document).on('nested:fieldAdded', function(e) { window.ReactRailsUJS.mountComponents(e.target); }); ``` With backward compatibility, of course. --- lib/assets/javascripts/react_ujs.js.erb | 26 ++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/assets/javascripts/react_ujs.js.erb b/lib/assets/javascripts/react_ujs.js.erb index c80f464bb..3ad9cb2fb 100644 --- a/lib/assets/javascripts/react_ujs.js.erb +++ b/lib/assets/javascripts/react_ujs.js.erb @@ -14,17 +14,29 @@ // `data-react-class` DOM elements findDOMNodes: function(searchSelector) { // we will use fully qualified paths as we do not bind the callbacks - var selector; - if (typeof searchSelector === 'undefined') { - var selector = '[' + window.ReactRailsUJS.CLASS_NAME_ATTR + ']'; - } else { - var selector = searchSelector + ' [' + window.ReactRailsUJS.CLASS_NAME_ATTR + ']'; + var selector, parent; + + switch (typeof searchSelector) { + case 'undefined': + selector = '[' + window.ReactRailsUJS.CLASS_NAME_ATTR + ']'; + parent = document; + break; + case 'object': + selector = '[' + window.ReactRailsUJS.CLASS_NAME_ATTR + ']'; + parent = searchSelector; + break; + case 'string': + selector = searchSelector + '[' + window.ReactRailsUJS.CLASS_NAME_ATTR + ']'; + parent = document; + break + default: + break; } if ($) { - return $(selector); + return $(selector, parent); } else { - return document.querySelectorAll(selector); + return parent.querySelectorAll(selector); } },