Use collection instead of each

I'm not sure why, but this fixes a problem that occures in builds/show.
It's probably some kind of weird behavior that's happening when ember
manages views insterted with each as opposed to collection management.
This commit is contained in:
Piotr Sarnacki 2012-07-27 20:37:42 +02:00
parent 5a077d3646
commit c297033f84
2 changed files with 36 additions and 41 deletions

View File

@ -15,29 +15,21 @@
</ul>
<div class="tab">
<ul id="repositories">
{{#each repository in controller}}
{{#view Travis.RepositoriesItemView contextBinding="repository"}}
<li {{bindAttr class="view.classes"}}>
<a {{bindAttr href="view.urlRepository"}} {{action route}} class="current">{{slug}}</a>
<a {{bindAttr href="view.urlLastBuild"}} {{action route}} class="last_build">#{{lastBuildNumber}}</a>
{{#collection Travis.RepositoriesListView contentBinding="controller"}}
{{#with view.repository}}
<a {{bindAttr href="view.urlRepository"}} {{action route}} class="current">{{slug}}</a>
<a {{bindAttr href="view.urlLastBuild"}} {{action route}} class="last_build">#{{lastBuildNumber}}</a>
<p class="summary">
<span class="duration_label">{{t repositories.duration}}:</span>
<abbr class="duration" {{bindAttr title="lastBuildStartedAt"}}>{{formatDuration lastBuildDuration}}</abbr>,
<span class="finished_at_label">{{t repositories.finished_at}}:</span>
<abbr class="finished_at timeago" {{bindAttr title="lastBuildFinishedAt"}}>{{formatTime lastBuildFinishedAt}}</abbr>
</p>
{{#if description}}
<p class="description">{{description}}</p>
{{/if}}
<span class="indicator"></span>
</li>
{{/view}}
{{else}}
<div class="loading">
<span>Loading</span>
</div>
{{/each}}
<ul>
<p class="summary">
<span class="duration_label">{{t repositories.duration}}:</span>
<abbr class="duration" {{bindAttr title="lastBuildStartedAt"}}>{{formatDuration lastBuildDuration}}</abbr>,
<span class="finished_at_label">{{t repositories.finished_at}}:</span>
<abbr class="finished_at timeago" {{bindAttr title="lastBuildFinishedAt"}}>{{formatTime lastBuildFinishedAt}}</abbr>
</p>
{{#if description}}
<p class="description">{{description}}</p>
{{/if}}
<span class="indicator"></span>
{{/with}}
{{/collection}}
</div>

View File

@ -18,28 +18,31 @@
'active' if @get('tab') == 'search'
).property('tab')
RepositoriesItemView: Travis.View.extend
repositoryBinding: 'context'
RepositoriesListView: Em.CollectionView.extend
elementId: 'repositories'
repositoryBinding: 'content'
tagName: 'ul'
classes: (->
$.compact(['repository', @get('color'), @get('selected')]).join(' ')
).property('color', 'selected')
emptyView: Ember.View.extend
template: Ember.Handlebars.compile('<div class="loading"><span>Loading</span></div>')
color: (->
Travis.Helpers.colorForResult(@get('repository.lastBuildResult'))
).property('repository.lastBuildResult')
itemViewClass: Travis.View.extend
repositoryBinding: 'content'
classNames: ['repository']
classNameBindings: ['color', 'selected']
selectedBinding: 'repository.selected'
selected: (->
'selected' if @get('repository.selected')
).property('repository.selected')
color: (->
Travis.Helpers.colorForResult(@get('repository.lastBuildResult'))
).property('repository.lastBuildResult')
urlRepository: (->
Travis.Urls.repository(@get('repository.slug'))
).property('repository.slug')
urlRepository: (->
Travis.Urls.repository(@get('repository.slug'))
).property('repository.slug')
urlLastBuild: (->
Travis.Urls.build(@get('repository.slug'), @get('repository.lastBuildId'))
).property('repository.slug', 'repository.lastBuildId')
urlLastBuild: (->
Travis.Urls.build(@get('repository.slug'), @get('repository.lastBuildId'))
).property('repository.slug', 'repository.lastBuildId')
RepositoryView: Travis.View.extend
templateName: 'repos/show'