What am I missing to make Foundation's Magellan work?
This is my Codepen that is not working, but I copied the same HTML and CSS from this original Foundations Codepen.
I have added:
jquery.js
foundation.js
foundation.magellan.js
foundation.core.js
foundation.smoothScroll.js
But can't make it work, is something missing?
So a couple of things...
What they don't tell you is you much have the init within a document ready
$(function() {
$(document).foundation();
});
And the active class is
.is-active
Once you update those 2 things... your magellan will work.
Related
AFAIK, no sites like jsfiddle or codepen currently support Famo.us. Are there other methods for sharing working code examples of Famo.us that are permanent enough to warrant using on Stack Overflow?
Starting on May 16th, Famo.us will begin testing a minified CDN version of famous.js that can be used in much the same way as one would use the minified CDN for JQuery and JQuery plugins. Once the CDN is in place, developers can fiddle with famo.us core, famo.us discrete examples, famo.us widgets and famo.us templates within famo.us university, jsfiddle and codepen.
In addition, we will also be testing a new BUILD MIN service to super minify your code. Send a .zip file to the BUILD MIN service of famo.us and get back a custom min'd and CDN'd famous.js that only uses the components needed for our app.
hope this helps.
I compiled famo.us so that it can be used in a jsfiddle.
Here is the jsfiddle http://jsfiddle.net/jperl/7wEWU.
Here is the compiled repo https://github.com/jperl/famous-compiled.
http://jsfiddle.net/7beq5/2
<html>
<script src='http://code.famo.us/lib/require.js'></script>
<script src='http://code.famo.us/famous/0.2/famous.min.js'></script>
<script> // (this could be another file)
require(['famous/core/Engine',
'famous/core/Surface',
'famous/core/Modifier'
], function(Engine, Surface, Modifier){
// --------------- use famo.us here ------------------ //
});
</script>
<html>
** EDIT **
Check out jonperls answer. He has compiled a working version of famo.us for use in JSFiddle. Simply use the External Links feature of JSFiddle to link to the compiled source.
** ORIGINAL **
I have not heard of any way to share snippets in line with working examples.. But you could always just host the code here.. then link to the working example.
The quickest and easiest way I found to share Famo.us demos has been to host the examples on amazon's S3 as a static webpage.
It is super easy to create a bucket and enable it to act as a static hosted site.
Worrying about DNS is optional. When you enable a bucket as a static host you get an endpoint. eg.
http://higherorderhuman.com.s3-website-us-east-1.amazonaws.com
It is up to you if you want to deal with setting up DNS and making that point to a more attractive URL. For me, both..
http://higherorderhuman.com.s3-website-us-east-1.amazonaws.com/examples/lens.html
and
http://higherorderhuman.com/examples/lens.html
Go to the same place.
By using folders on s3 and creating separate html files, I am able to host all examples from this single endpoind. eg. another example at..
http://higherorderhuman.com/examples/scrollbars.html
Just make sure all files that get uploaded are made public with.. 'Make Public'
Still looking forward for JSFiddle support.. But at least this does it for me for now!
The codefamo.us site launched today (May 19). It displays famo.us code stored as a GitHub Gist if saved with the name main.js.
To view the working example of the code, simply tack the gist identifier onto the end of the "gist.codefamo.us" uri:
For example:
http://gist.codefamo.us/74ca030bafdca1635e47
The code displays in a collapsible panel and runs in a preview panel. You can make changes to the code and see them reflected in the preview, similar to Famo.us University.
Disclosure: I'm one of the two people behind this site.
Use http://famousco.de/ and then post the link here!
p.s. i am the webmaster of famousco.de :)
I am trying to allow my user to create a group and invite his friends.
I have already tried several ways, but its not really working out. My current approach looks something like this in the main template:
{{#each session.user.friends}}
<li>{{view App.FriendSelectCheckbox userBinding='this' groupBinding='controller.content'}} {{nickName}}</li>
{{/each}}
And the custom view is defined like this:
(the whole thing is basically from this JS-Fiddle: http://jsfiddle.net/durinthomas/cB3De/)
App.FriendSelectCheckbox = Ember.Checkbox.extend({
checkedObserver: function(){
if(this.get('checked'))
this.get('group.users').addObject(this.get('user'));
else
this.get('group.users').removeObject(this.get('user'));
}.observes('checked')
});
The problem is that the checkbox is not rendered. I know that there is usually a handlebars helper to render checkboxes or other built in views. But I thought this would be the approach to render just a view. And just for playing around I also tried to do
{{view Ember.Checkbox}} which is not rendering a checkbox either.
The checkbox is successfully rendering for me: http://emberjs.jsbin.com/qazuj/1/edit?html,js,output
The JSFiddle you linked uses an pre 1.0 version of Ember. Are you using latest?
The issue was in my css, (I am still searching where it is coming from, but the reason why my checkboxes (doesn't matter which kind) are not rendered:
#media -sass-debug-info{filename{font-family:file\:\/\/\/Users\/marc\/Sites\/ember\/app\/styles\/style\.scss}line{font-family:\00003607}}
input[type="checkbox"] {
display: none;
}
I know it hints where it is coming from, but its hidden in scss imports, It might be foundation or font-awesome or somethign like that.
For some reason ember won't work in jsfiddle at the moment. And, I mean it won't work for my simple example, it won't work for other fiddles such as this starter kit, or this one, or either of the fiddles in this post.
I've tried this on Chrome and Firefox on two different machines. And, on my example, I've tried a range of CDNs, methods of including the libraries, versions, body declarations and actual code.
I must be doing something dumb because I keep getting different errors depending on which example I look at, which seems to indicate something fundamentally wrong but I assume jsfiddle works (or worked) in general.
Is anyone else seeing the same thing as me?
Apparently, posts with links to jsfiddle must be accompanied by code now? I've seen other posts with jsfiddle links and no code? Isn't this the whole point of jsfiddle? Well, here's the code.
Add the app initialization script:
var App = Ember.Application.create();
and wrap your handlebars in the correct <script> tags:
<script type="text/x-handlebars" data-template-name="application">
....
</script>
Updated JSFiddle
It's been difficult to keep up with the evolution of Ember JS as its approached (and reached!) version 1.0.0. Tutorials and documentation have come and gone, leading to a lot of confusion about best practices and the intent of the original developers.
My question is exactly that: What are the best practices for Ember JS? Are there any updated tutorials or working samples showing how Ember JS is intended to be used? Code samples would be great!
Thanks to everyone, especially the Ember JS devs!
Mike Grassotti's Minimum Viable Ember.js QuickStart Guide
This quickstart guide should get you from zero to slightly-more-than-zero in a couple of minutes. When done, you should feel somewhat confident that ember.js actually works and hopefully will be interested enough to learn more.
WARNING: Don't just try this guide then think ember-sucks cause "I could write that quickstart-guide better in jQuery or Fortran" or whatever. I am not trying to sell you on ember or anything, this guide is little more than a hello-world.
Step 0 - Check out jsFiddle
this jsFiddle has all the code from this answer
Step 1 - Include ember.js and other required libraries
Ember.js requires both jQuery and Handlebars. Be sure those libraries are loaded before ember.js:
<script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script>
<script type='text/javascript' src="http://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.js"></script>
<script type='text/javascript' src="http://cdnjs.cloudflare.com/ajax/libs/ember.js/1.0.0-rc.1/ember.js"></script>
Step 2 - Describe your application's user interface using one or more handlebars templates
By default ember will replace body of your html page using content of one or more handlbars templates. Someday these templates will be in separate .hbs files assembled by sprockets or maybe grunt.js. For now we will keep everything in one file and use script tags.
First, let's add a single application template:
<script type="text/x-handlebars" data-template-name="application">
<div class="container">
<h1>Ember.js is easy?<small> Minimum Viable Ember.js QuickStart Guide</small></h1>
<p>{{message}}</p>
</div>
</script>
Step 3 - Initialize your ember application
Just add another script block with App = Ember.Application.create({}); to load ember.js and initialize your application.
<script type='text/javascript'>
App = Ember.Application.create({});
</script>
That's all you need to create a basic ember application, but it's not very interesting.
Step 4: Add a controller
Ember evaluates each handlebars templates in the context of a controller. So application template has a matching ApplicationController. Ember creates is automatically if you don't define one, but here let's customize it to add a message property.
<script type='text/javascript'>
App.ApplicationController = Ember.Controller.extend({
message: 'This is the application template'
});
</script>
Step 5: Define routes + more controllers and templates
Ember router makes it easy to combine templates/controllers into an application.
<script type='text/javascript'>
App.Router.map(function() {
this.route("index", { path: "/" });
this.route("list", { path: "/list" });
});
App.IndexController = Ember.Controller.extend({
message: 'Hello! See how index.hbs is evaluated in the context of IndexController'
});
App.ListRoute = Ember.Route.extend({
setupController: function(controller) {
controller.set('content', ['angular.js', 'backbone.js', 'ember.js']);
}
});
</script>
To make this work, we modify our the application template by adding an {{outlet}} helper. Ember router will render appropriate template into the outlet depending on user's route. We will also use the {{linkTo}} helper to add navigation links.
<script type="text/x-handlebars" data-template-name="application">
<div class="container">
<h1>Ember.js is easy?<small> Minimum Viable Ember.js QuickStart Guide</small></h1>
<p>{{message}}</p>
<div class="row">
{{#linkTo index class="span3 btn btn-large btn-block"}}Home{{/linkTo}}
{{#linkTo list class="span3 btn btn-large btn-block"}}List{{/linkTo}}
</div>
{{outlet}}
</div>
</script>
<script type="text/x-handlebars" data-template-name="list">
<h3 class="demo-panel-title">This is the list template</h3>
<ul>
{{#each item in content}}
<li>{{item}}</li>
{{/each}}
</ul>
</script>
<script type="text/x-handlebars" data-template-name="index">
<h3 class="demo-panel-title">This is the index template</h3>
<p>{{message}}</p>
</script>
Done!
A working example of this application is available here.
You can use this jsFiddle as a starting point for your own ember apps
Next Steps...
Read the Ember Guides
Maybe buy the Peepcode screencast
Ask questions here on Stack Overflow or in ember IRC
For reference, my original answer:
My question is for any Ember.js expert, and certainly the respective tutorial authors: When should I use design patterns from one tutorial, and when from the other?
These two tutorials represent best practices at the time they were written. For sure there is something that can be learned from each, both are sadly doomed to become out of date because ember.js is moving very quickly. Of the two, Trek's is far more current.
What components of each are personal preferences, and what components will prove essential as my app matures?
If you are developing a new ember application I would not recommend following the Code Lab approach. It is just too out-of-date to be useful.
In Code Lab's design, Ember seems to be closer to existing within the application (even though it is 100% of his custom JS), whereas Trek's application seems to live more within Ember.
Your comment is bang-on. CodeLab is making taking advantage of core ember components and accessing them from global scope. When it was written (9 months ago) this was pretty common but today best-practice for writing ember applications is much closer to what Trek was doing.
That said, even Trek's tutorial is becoming out-of-date. Components that were required ApplicationView and ApplicationController are now generated by the framework itself.
By far the most current resource is the set of guides published at http://emberjs.com/guides/
- they have been written from the ground up over the last few weeks and reflect the latest (pre-release) version of ember.
I'd also check out trek's wip project here: https://github.com/trek/ember-todos-with-build-tools-tests-and-other-modern-conveniences
EDIT:
#sly7_7 : I'd also give an other example, using ember-data https://github.com/dgeb/ember_data_example
There is an important project that both new and veteran Ember.js developers should take advantage of:
Ember-CLI
While it does require some comfort level with the command line, you can generate a modern Ember project with community recommended best practices in a matter of seconds.
While it is beneficial to setup an Ember.js project the hard way as in Mike Grassotti's answer, you should not be doing that for production code. Especially when we have such a powerful and easy to use project like Ember-CLI to show us the Yehuda approved happy path.
There is 30 minutes fresh screencast made by #tomdale: https://www.youtube.com/watch?v=Ga99hMi7wfY
I would highly recommend using Yeoman and its accompanying ember generator. Out of the box you get all the tools you need to develop, test and prepare an app for production. As an added bonus, you'll be able to split your view templates into multiple files and start with an intelligent directory structure that will facilitate you in creating a maintainable codebase.
I've written a tutorial on getting it up and running in about 5 minutes. Just install node.js and follow along here
The Fire Up Ember - Peepcode screencast is worth a watch.
Also go through this free tutorial titled Let’s Learn Ember from Tuts+ Premium. Its free because its from their free courses series.
This course, as the Tuts guys call it, is divided into fourteen easy to follow chapters.
I hope this helps.
Regards,
I prefer the charcoal yeoman approach. It gives you a ton of stuff out of the box including:
a nice folder architecture using a 'module' approach.
neuter
live reload
minify
uglify
jshint
and more.
and its super easy to setup, just run yo charcoal to create an app then yo charcoal:module myModule to add a new module.
more info here: https://github.com/thomasboyt/charcoal
I've just created a Starter Kit, if you would like to use the latest EmberJS with Ember-Data, with Emblem template engine. All wrapped in Middleman, so you can develop with CoffeeScript. Everything on my GitHub: http://goo.gl/a7kz6y
Although outdated Flame on Ember.js
is still a good tutorial for someone looking at ember for the first time.
I've started building a series of videos that start from before Ember and build towards using Ember in anger in serious use-cases for real-world things.
If you're interested in seeing this hit the light of day (I'm more than happy to eventually put it public if there's interest) you should definitely go over to the post I made and hit "like" (or just comment here, I guess):
http://discuss.emberjs.com/t/making-ember-easier-to-approach-aka-crazy-screencasts-videos-that-will-stick-in-your-mind-for-learning-ember/5284
I'm super keen to make it to help the community flourish, but also to help people learn how to build standard web sites in an easy way.
Quick question.
I found handling site navigation (not the routing aprt, just a simple nav bar) with ember.js a little complex.
So I thought I will just code this aprt with jQuery, push history into location url and hope that Ember.js will detect this change and the router take action.
Scenario :
1) ember.js will use a DIV for rootElement and the navbar is declared in the body.
<body>
<div id="nav">
<ul><li><a>Item1</a></li></ul>
</div>
<div id="rootEmberApp"></div>
</body>
2) then a jQuery script will be bound to the links (item1) of the nav div and push changes to the URL but preventing default action without stopping the propgation (I didn't want to reload all the scripts). Something like :
$(document).ready(function(){
$("#navigation a").click(function(event){
App.router.location.setURL('/ember/listItems');
event.preventDefault();
});
3) I was hoping that Ember.js will fire at this time and take action.
I didn't succeed.
Is it silly ? Any idea how to do that ?
Thanks a lot.
Update 1 : thanks for the answer. Yes you're right. I was just not fully pleased with the solutions I tried or found about a nav bar. I will look again the todoMVC example and its use of the CollectionView. From a beginner point of view, the CollectionView seems a good way to describe (declare) the View and at the same times it's not easy to read (it's easier when the view is written with pure html and the js is bound to it ala jQuery).
Thanks again
This will probably not be a satisfactory answer, but... this is not the Ember Way. A core concept of Ember routing is that once the app loads, the source of truth is in Javascript. As you move through an Ember app, the router transitions from state to state and the URL is updated as a side effect. You're trying to turn that on it's head. It's not impossible -- you can definitely get what you're trying to do to work. However, I wanted you to know that it goes against the intention the designers had in mind.