From dc38a0e37587c304e5d8d12f114b5b5e1ec9347a Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Fri, 30 Dec 2011 12:05:11 -0600 Subject: [PATCH] Add $.fn.view method, which links any jquery element to its parent view. When generating a jQuery fragment with the templating framework, I store the fragment in the 'view' data property on all the fragments elements. This allows us to query an element from the DOM and determine what view object it belongs to. --- spec/stdlib/template-spec.coffee | 6 ++++++ src/stdlib/template.coffee | 3 +++ src/stdlib/template/builder.coffee | 1 + 3 files changed, 10 insertions(+) diff --git a/spec/stdlib/template-spec.coffee b/spec/stdlib/template-spec.coffee index 537e94c66..35649b5bb 100644 --- a/spec/stdlib/template-spec.coffee +++ b/spec/stdlib/template-spec.coffee @@ -83,3 +83,9 @@ describe "Template", -> expect(view.li2Keypressed).toHaveBeenCalled() expect(view.li1Clicked).not.toHaveBeenCalled() + it "makes the original jquery wrapper accessible via the view method from any child element", -> + expect(view.view()).toBe view + expect(view.header.view()).toBe view + expect(view.subview.view()).toBe view.subview + expect(view.subview.header.view()).toBe view.subview + diff --git a/src/stdlib/template.coffee b/src/stdlib/template.coffee index a97632159..cac08434f 100644 --- a/src/stdlib/template.coffee +++ b/src/stdlib/template.coffee @@ -48,3 +48,6 @@ class Template methodName = elt.attr(eventName) elt.on eventName, (event) -> view[methodName](event, elt) +$.fn.view = -> + this.data('view') + diff --git a/src/stdlib/template/builder.coffee b/src/stdlib/template/builder.coffee index 0251db2a8..2e50e678f 100644 --- a/src/stdlib/template/builder.coffee +++ b/src/stdlib/template/builder.coffee @@ -27,6 +27,7 @@ class Builder toFragment: -> fragment = $(@toHtml()) @wireOutlets fragment + fragment.find('*').andSelf().data('view', fragment) fn(fragment) for fn in @postProcessingFns fragment