<html>
<head>
<meta charset=utf-8 />
<title>SO</title>
<script src="http://code.jquery.com/jquery-2.0.2.js"></script>
<script src="http://builds.emberjs.com/handlebars-1.0.0-rc.4.js"></script>
<script src="http://builds.emberjs.com/ember-latest-stable.js"></script>
<script src="http://builds.emberjs.com/ember-data-latest.js"></script>
</head>
<body>
<script type="text/x-handlebars" data-template-name="application">
<h1>ember-latest jsbin</h1>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<pre>pagination:
page: {{pagination.current_page}}
total count: {{pagination.total_count}}
total pages: {{pagination.total_pages}}
</pre>
<ul>
{{#each}}
<li>{{id}}. {{name}}</li>
{{/each}}
</ul>
</script>
</body>
</html>
App = Ember.Application.create({});
App.IndexRoute = Ember.Route.extend({
model: function(){
return App.Plugin.find();
}
});
App.IndexController = Ember.ArrayController.extend({
pagination: function() {
if (this.get('model.isLoaded')) {
var store = this.get('store');
modelType = this.get('model.type');
console.log('modeltype: ', this.get('model.type'));
var metadata = store.typeMapFor(modelType).metadata;
console.log('metadata: ', metadata);
return metadata.pagination;
}
}.property('model.isLoaded')
});
App.Store = DS.Store.extend({
adapter: 'App.Adapter'
});
App.Plugin = DS.Model.extend({
name: DS.attr('string')
});
App.serializer = DS.RESTSerializer.create();
App.serializer.configure({
meta: 'meta',
pagination: 'pagination'
});
App.Adapter = DS.RESTAdapter.extend({
serializer: App.serializer,
ajax: function(url, type, hash) {
console.log('App.Adapter.ajax:', url, type, hash);
json = App.RESTDATA[url];
if (json) {
console.log('App.Adapter.ajax: Found RESTDATA: ', json);
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.run(null, resolve, json);
});
} else {
console.log('App.Adapter.ajax: No RESTDATA for url, calling API', url);
return this._super(url, type, hash);
}
}
});
App.RESTDATA = {
'/plugins':
{
"meta":{
"pagination":{
"total_count":16,
"total_pages":2,
"current_page":1
}
},
"plugins":[{
"id":"1",
"name":"zhangsan"
}]
}
};
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |