remove the repository.* states nesting

This commit is contained in:
Sven Fuchs 2012-06-18 17:14:21 +02:00
parent 2ff639e38e
commit 89f624d377
4 changed files with 125 additions and 103 deletions

View File

@ -8,12 +8,23 @@ App.Repository = DS.Model.extend({
ownerName: DS.attr('string'), ownerName: DS.attr('string'),
name: DS.attr('string') name: DS.attr('string')
}); });
App.Build = DS.Model.extend({ App.Repository.FIXTURES = [
number: DS.attr('number') { id: 1, owner_name: 'travis-ci', name: 'travis-core' },
}); { id: 2, owner_name: 'travis-ci', name: 'travis-assets' },
{ id: 3, owner_name: 'travis-ci', name: 'travis-hub' }
];
App.Repository.FIXTURES = [{ id: 1, owner_name: 'travis-ci', name: 'travis-core' }]; App.Build = DS.Model.extend({
App.Build.FIXTURES = [{ id: 1, number: 1 }, { id: 2, number: 2 }]; repository_id: DS.attr('number'),
number: DS.attr('number'),
repository: DS.belongsTo('App.Repository')
});
App.Build.FIXTURES = [
{ id: 1, repository_id: 1, number: 1 },
{ id: 2, repository_id: 1, number: 2 },
{ id: 3, repository_id: 2, number: 3 },
{ id: 4, repository_id: 3, number: 4 }
];
App.ApplicationController = Em.Controller.extend(); App.ApplicationController = Em.Controller.extend();
App.RepositoriesController = Em.Controller.extend(); App.RepositoriesController = Em.Controller.extend();
@ -47,120 +58,133 @@ var onReady = function(object, path, callback) {
} }
}; };
var onRepositoryLoaded = function(object, callback) {
// should observe RecordArray.isLoaded instead, but that doesn't seem to exist?
var path = Ember.isArray(object) ? 'firstObject.isLoaded' : 'isLoaded';
onReady(object, path, function() {
callback(object.get('firstObject') || object)
});
}
App.Router = Em.Router.extend({ App.Router = Em.Router.extend({
enableLogging: true, enableLogging: true,
location: 'hash', location: 'hash',
root: Em.Route.extend({ root: Em.Route.extend({
viewRepository: Ember.Route.transitionTo('repository.current'), viewRepository: Ember.Route.transitionTo('current'),
// why is applicationController undefined here? would like to share connecting the left outlet to repositories
// connectOutlets: function(router) {
// router.connectLeft();
// },
serialize: function(router, context) {
return router.serialize();
},
index: Em.Route.extend({ index: Em.Route.extend({
route: '/', route: '/',
serialize: function(router, context) {
return router.serialize();
},
connectOutlets: function(router) { connectOutlets: function(router) {
router.connectLeft(); router.connectLayout(null, null, function(repository) {
router.connectLoading(); // should use repository.lastBuild()
router.connectCurrent(Build.find(1))
var repositories = router.getPath('repositoriesController.content');
var build = App.Build.find(1);
// should observe RecordArray.isLoaded instead, but that doesn't seem to exist?
console.log('find repos')
onReady(repositories, 'firstObject.isLoaded', function() {
console.log('repo loaded')
router.connectMain(repositories.get('firstObject'), build)
router.connectCurrent(build)
});
},
viewCurrent: Ember.Route.transitionTo('repository.current'),
viewHistory: Ember.Route.transitionTo('repository.history'),
viewBuild: Ember.Route.transitionTo('repository.build'),
}),
repository: Em.Route.extend({
route: '/:ownerName/:name',
serialize: function(router, context) {
return router.serialize();
},
connectOutlets: function(router) {
router.connectLeft();
router.connectLoading();
// this would be a query for the repo based on path (how to retrieve the path here?)
var repository = App.Repository.find(1);
console.log('find repo')
onReady(repository, 'isLoaded', function() {
console.log('repo loaded')
router.connectMain(repository, App.Build.find(1))
}) })
}, },
current: Em.Route.extend({ viewCurrent: Ember.Route.transitionTo('current'),
route: '/', viewHistory: Ember.Route.transitionTo('history'),
viewBuild: Ember.Route.transitionTo('build'),
}),
serialize: function(router, context) { current: Em.Route.extend({
return router.serialize(); route: '/:ownerName/:name',
serialize: function(router, repository) {
return router.serializeRepository(repository);
}, },
connectOutlets: function(router, context) { connectOutlets: function(router, repository) {
params = router.serializeRepository(repository);
// needs to implement findQuery
// var repositories = App.Repository.find(params);
var repositories = App.Repository.find().filter(function(data) {
return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
})
router.connectLayout(repositories, null, function(repository) {
// should use repository.lastBuild()
router.connectCurrent(App.Build.find(1)) router.connectCurrent(App.Build.find(1))
});
} }
}), }),
viewCurrent: Ember.Route.transitionTo('current'), viewCurrent: Ember.Route.transitionTo('current'),
history: Em.Route.extend({ history: Em.Route.extend({
route: '/builds', route: '/:ownerName/:name/builds',
serialize: function(router, context) { serialize: function(router, repository) {
return router.serialize(); return router.serializeRepository(repository);
}, },
connectOutlets: function(router, context) { connectOutlets: function(router, repository) {
params = router.serializeRepository(repository);
// needs to implement findQuery
// var repositories = App.Repository.find(params);
var repositories = App.Repository.find().filter(function(data) {
return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
})
router.connectLayout(repository, null, function(repository) {
router.connectHistory(App.Build.find()) router.connectHistory(App.Build.find())
});
} }
}), }),
viewHistory: Ember.Route.transitionTo('history'), viewHistory: Ember.Route.transitionTo('history'),
build: Em.Route.extend({ build: Em.Route.extend({
route: '/builds/:build_id', route: '/:ownerName/:name/builds/:id',
serialize: function(router, context) { serialize: function(router, build) {
return $.extend(router.serialize(), this._super(router, context)); return router.serializeBuild(build);
}, },
connectOutlets: function(router, context) { connectOutlets: function(router, build) {
params = { id: 1 } params = router.serializeBuild(build);
router.connectBuild(App.Build.find(params.id)) // needs to implement findQuery
// var repositories = App.Repository.find(params);
var repositories = App.Repository.find().filter(function(data) {
return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
})
var build = App.Build.find(params.id)
router.connectLayout(repositories, build, function(repository) {
router.connectBuild(build)
});
} }
}), }),
viewBuild: Ember.Route.transitionTo('build') viewBuild: Ember.Route.transitionTo('build')
})
}), }),
serialize: function() { serializeRepository: function(repository) {
var ownerName = this.getPath('repositoryController.content.ownerName'); return repository.getProperties ? repository.getProperties('ownerName', 'name') : repository;
var name = this.getPath('repositoryController.content.name');
return { ownerName: ownerName, name: name };
}, },
connectLeft: function() { serializeBuild: function(build) {
this.get('applicationController').connectOutlet({ outletName: 'left', name: 'repositories', context: App.Repository.find() }) if(build && build.get) {
var repository = build.get('repository') || App.Repository.find(build.get('repository_id')); // wat.
var params = this.serializeRepository(repository);
return $.extend(params, { id: build.get('id') });
} else {
return build;
}
},
connectLayout: function(repository, build, callback) {
var repositories = App.Repository.find();
this.connectLeft(repositories);
this.connectLoading();
onRepositoryLoaded(repository || repositories, function(repository) {
this.connectMain(repository, build)
callback(repository);
}.bind(this));
},
connectLeft: function(repositories) {
this.get('applicationController').connectOutlet({ outletName: 'left', name: 'repositories', context: repositories })
}, },
connectLoading: function() { connectLoading: function() {

View File

@ -1,6 +1,6 @@
<ul> <ul>
{{#each repository in content}} {{#each repository in content}}
<li><a {{action viewRepository href=true}}>{{repository.ownerName}}/{{repository.name}}</a></li> <li><a {{action viewRepository href=true context="repository"}}>{{repository.ownerName}}/{{repository.name}}</a></li>
{{/each}} {{/each}}
</ul> </ul>

View File

@ -1,5 +1,5 @@
<ul class="tabs"> <ul class="tabs">
<li><a {{action viewCurrent href=true}}>Current</a></li> <li><a {{action viewCurrent href=true context="repository"}}>Current</a></li>
<li><a {{action viewHistory href=true}}>History</a></li> <li><a {{action viewHistory href=true context="repository"}}>History</a></li>
<li><a {{action viewBuild context="build" href=true}}>Build</a></li> <li><a {{action viewBuild href=true context="build"}}>Build</a></li>
</ul> </ul>

View File

@ -15455,7 +15455,6 @@ Ember.Routable = Ember.Mixin.create({
*/ */
stashContext: function(manager, context) { stashContext: function(manager, context) {
var serialized = this.serialize(manager, context); var serialized = this.serialize(manager, context);
console.log(['stashContext', this.name, serialized && serialized.ownerName])
manager.setStateMeta(this, 'serialized', serialized); manager.setStateMeta(this, 'serialized', serialized);
if (get(this, 'isRoutable') && !get(manager, 'isRouting')) { if (get(this, 'isRoutable') && !get(manager, 'isRouting')) {
@ -15499,7 +15498,6 @@ console.log(['stashContext', this.name, serialized && serialized.ownerName])
var matcher = get(this, 'routeMatcher'), var matcher = get(this, 'routeMatcher'),
serialized = manager.getStateMeta(this, 'serialized'); serialized = manager.getStateMeta(this, 'serialized');
console.log(['stateMeta', this.name, serialized && serialized.ownerName])
// merge the existing serialized object in with the passed // merge the existing serialized object in with the passed
// in hash. // in hash.