lib/assets/javascripts/react_ujs.js.erb in react-rails-1.3.1 vs lib/assets/javascripts/react_ujs.js.erb in react-rails-1.3.2
- old
+ new
@@ -12,21 +12,33 @@
RAILS_ENV_DEVELOPMENT: <%= Rails.env == "development" %>,
// helper method for the mount and unmount methods to find the
// `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);
}
},
mountComponents: function(searchSelector) {
var nodes = window.ReactRailsUJS.findDOMNodes(searchSelector);
@@ -39,10 +51,13 @@
// Fallback to eval to handle cases like 'My.React.ComponentName'.
var constructor = window[className] || eval.call(window, className);
var propsJson = node.getAttribute(window.ReactRailsUJS.PROPS_ATTR);
var props = propsJson && JSON.parse(propsJson);
- React.render(React.createElement(constructor, props), node);
+ // Prefer ReactDOM if defined (introduced in 0.14)
+ var renderer = (typeof ReactDOM == "object") ? ReactDOM : React;
+
+ renderer.render(React.createElement(constructor, props), node);
}
},
unmountComponents: function(searchSelector) {
var nodes = window.ReactRailsUJS.findDOMNodes(searchSelector);