diff --git a/examples/unfinished/reorderable-list/client/shark.js b/examples/unfinished/reorderable-list/client/shark.js index 25728aa253..2ae26b746c 100644 --- a/examples/unfinished/reorderable-list/client/shark.js +++ b/examples/unfinished/reorderable-list/client/shark.js @@ -13,21 +13,18 @@ UI.body.rendered = function () { var newRank; if (!before) { // moving to the top of the list - newRank = SimpleRationalRanks.beforeFirst( - after.$ui.component.data().rank); + newRank = SimpleRationalRanks.beforeFirst(UI.getElementData(after).rank); } else if (!after) { // moving to the bottom of the list - newRank = SimpleRationalRanks.afterLast( - before.$ui.component.data().rank); + newRank = SimpleRationalRanks.afterLast(UI.getElementData(before).rank); } else { newRank = SimpleRationalRanks.between( - before.$ui.component.data().rank, - after.$ui.component.data().rank); - + UI.getElementData(before).rank, + UI.getElementData(after).rank); } - Items.update(el.$ui.component.data()._id, {$set: {rank: newRank}}); + Items.update(UI.getElementData(el)._id, {$set: {rank: newRank}}); } }); }; diff --git a/packages/ui/base.js b/packages/ui/base.js index d2b12afd06..8f6cba41f6 100644 --- a/packages/ui/base.js +++ b/packages/ui/base.js @@ -329,3 +329,11 @@ UI.Component.notifyParented = function () { UI.Component.preserve = function () { Meteor._debug("The 'preserve' method on templates is now unnecessary and deprecated."); }; + +// Gets the data context of the enclosing component that rendered a +// given element +UI.getElementData = function (el) { + var comp = UI.DomRange.getContainingComponent(el); + return comp && getComponentData(comp); +}; + diff --git a/packages/ui/domrange.js b/packages/ui/domrange.js index 47d02737ca..39edbc31a1 100644 --- a/packages/ui/domrange.js +++ b/packages/ui/domrange.js @@ -1107,4 +1107,4 @@ DomRange.prototype.on = function (events, selector, handler) { }; -UI.DomRange = DomRange; \ No newline at end of file +UI.DomRange = DomRange; diff --git a/packages/ui/render_tests.js b/packages/ui/render_tests.js index 4292079565..3f121da2e6 100644 --- a/packages/ui/render_tests.js +++ b/packages/ui/render_tests.js @@ -684,3 +684,18 @@ Tinytest.add("ui - UI.render", function (test) { document.body.removeChild(div); }); + +Tinytest.add("ui - UI.getDataContext", function (test) { + var div = document.createElement("DIV"); + + var tmpl = UI.Component.extend({ + render: function () { + return SPAN(); + } + }); + + UI.insert(UI.renderWithData(tmpl, {foo: "bar"}), div); + var span = $(div).children('SPAN')[0]; + test.isTrue(span); + test.equal(UI.getElementData(span), {foo: "bar"}); +});