For the last 7 years I’ve worked with User Experience designers and I have a huge respect for their craft. I’m also loving how designers are embracing HTML5 and CSS3, and how it is giving them ownership over the experience.
It’s affording deep collaboration between the designer and developer, and asserting the need for frameworks and tools to play to our respective crafts, and to be sensitive to the designer-developer-workflow.
With this in mind I struggled for a while with Ember. I wanted a clean separation between my HTML and my code. Ideally I didn’t want to change the HTML, and I really didn’t want to pollute it with proprietary code belonging to Ember (or any other framework).
I was really disappointed as the only solution offered up was to use Ember.TextField.
From:
<input type="text" id="firstName" placeholder="First" autofocus required>
To:
{{view Ember.TextField valueBinding="firstName"}}
It breaks the clean separation between designer and developer. It makes my code difficult to maintain. I loose the expressiveness of HTML5. Why?
I get the binding goodness it may bring, but…
At this point I did consider walking away from Ember, but I did persevere. In the end I opted to use plain old JQuery in my code. I’m intrigued to see how this plays out as I grow my codebase, but in the meantime it keeps my HTML as pure as it can be.
HTML:
<script type="text/x-handlebars" data-template-name="registration">
<form autocomplete="on" id="registration" {{action createUser on="submit"}}>
<label>Name</label>
<input type="text" id="firstName" placeholder="First" autofocus required>
<input type="text" id="lastName" placeholder="Last" required>
<label>Email</label>
<input type="email" id="primaryEmailAddress" placeholder="hello@mydomain.com" autocomplete="on" required><br>
<label>Password <em>Minimum 6 characters</em></label>
<input type="password" id="password" autocomplete="off" required pattern=".{6,}" title="Passwords must have a minimum of 6 characters."><br>
<input type="submit" value="Create account" onmouseup="form.className='submitted';" />
</form>
</script>
JavaScript:
App.UsersController = Ember.ObjectController.extend({
createUser : function () {
'use strict';
var user = App.User.createRecord({
firstName : $("#firstName").val(),
lastName : $("#lastName").val(),
primaryEmailAddress : $("#primaryEmailAddress").val(),
password : $("#password").val()
});
}
});