mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 23:48:05 +03:00
Fix bug where subviews could clobber outlets on superviews.
Now we wire outlets before the subviews are attached, preventing any outlets on the subview from overwriting outlets on the superview.
This commit is contained in:
parent
2eb7d2a215
commit
b279063550
@ -8,13 +8,13 @@ describe "Template", ->
|
|||||||
subviewTemplate = class extends Template
|
subviewTemplate = class extends Template
|
||||||
content: (params) ->
|
content: (params) ->
|
||||||
@div =>
|
@div =>
|
||||||
@h2 params.title
|
@h2 { outlet: "header" }, params.title
|
||||||
@div "I am a subview"
|
@div "I am a subview"
|
||||||
|
|
||||||
template = class extends Template
|
template = class extends Template
|
||||||
content: (attrs) ->
|
content: (attrs) ->
|
||||||
@div =>
|
@div =>
|
||||||
@h1 attrs.title
|
@h1 { outlet: 'header' }, attrs.title
|
||||||
@list()
|
@list()
|
||||||
@subview 'subview', subviewTemplate.build(title: "Subview")
|
@subview 'subview', subviewTemplate.build(title: "Subview")
|
||||||
|
|
||||||
@ -52,6 +52,10 @@ describe "Template", ->
|
|||||||
expect(view.subview).toExist()
|
expect(view.subview).toExist()
|
||||||
expect(view.subview.find('h2:contains(Subview)')).toExist()
|
expect(view.subview.find('h2:contains(Subview)')).toExist()
|
||||||
|
|
||||||
|
it "does not overwrite outlets on the superview with outlets from the subviews", ->
|
||||||
|
expect(view.header).toMatchSelector "h1"
|
||||||
|
expect(view.subview.header).toMatchSelector "h2"
|
||||||
|
|
||||||
it "binds events for elements with event name attributes", ->
|
it "binds events for elements with event name attributes", ->
|
||||||
spyOn(view, 'li1Clicked').andCallFake (event, elt) ->
|
spyOn(view, 'li1Clicked').andCallFake (event, elt) ->
|
||||||
expect(event.type).toBe 'click'
|
expect(event.type).toBe 'click'
|
||||||
|
@ -24,7 +24,6 @@ class Template
|
|||||||
@builder = new Builder
|
@builder = new Builder
|
||||||
@content(attributes)
|
@content(attributes)
|
||||||
view = @builder.toFragment()
|
view = @builder.toFragment()
|
||||||
@wireOutlets(view)
|
|
||||||
@bindEvents(view)
|
@bindEvents(view)
|
||||||
if @viewProperties
|
if @viewProperties
|
||||||
$.extend(view, @viewProperties)
|
$.extend(view, @viewProperties)
|
||||||
@ -39,12 +38,6 @@ class Template
|
|||||||
subview: (args...) ->
|
subview: (args...) ->
|
||||||
@builder.subview.apply(@builder, args)
|
@builder.subview.apply(@builder, args)
|
||||||
|
|
||||||
wireOutlets: (view) ->
|
|
||||||
view.find('[outlet]').each ->
|
|
||||||
elt = $(this)
|
|
||||||
outletName = elt.attr('outlet')
|
|
||||||
view[outletName] = elt
|
|
||||||
|
|
||||||
bindEvents: (view) ->
|
bindEvents: (view) ->
|
||||||
for eventName in this.constructor.events
|
for eventName in this.constructor.events
|
||||||
view.find("[#{eventName}]").each ->
|
view.find("[#{eventName}]").each ->
|
||||||
|
@ -26,6 +26,7 @@ class Builder
|
|||||||
|
|
||||||
toFragment: ->
|
toFragment: ->
|
||||||
fragment = $(@toHtml())
|
fragment = $(@toHtml())
|
||||||
|
@wireOutlets fragment
|
||||||
fn(fragment) for fn in @postProcessingFns
|
fn(fragment) for fn in @postProcessingFns
|
||||||
fragment
|
fragment
|
||||||
|
|
||||||
@ -63,6 +64,12 @@ class Builder
|
|||||||
text: (string) ->
|
text: (string) ->
|
||||||
@document.push(new Text(string))
|
@document.push(new Text(string))
|
||||||
|
|
||||||
|
wireOutlets: (view) ->
|
||||||
|
view.find('[outlet]').each ->
|
||||||
|
elt = $(this)
|
||||||
|
outletName = elt.attr('outlet')
|
||||||
|
view[outletName] = elt
|
||||||
|
|
||||||
reset: ->
|
reset: ->
|
||||||
@document = []
|
@document = []
|
||||||
@postProcessingFns = []
|
@postProcessingFns = []
|
||||||
|
Loading…
Reference in New Issue
Block a user