# This example does an AJAX lookup and is in CoffeeScript
$('.typeahead').typeahead(
# source can be a function
source: (typeahead, query) ->
# this function receives the typeahead object and the query string| // See comments below. | |
| // This code sample and justification brought to you by | |
| // Isaac Z. Schlueter, aka isaacs | |
| // standard style | |
| var a = "ape", | |
| b = "bat", | |
| c = "cat", | |
| d = "dog", |
| app.get('/', function(req, res){ | |
| var ua = req.header('user-agent'); | |
| if(/mobile/i.test(ua)) { | |
| res.render('mobile.html'); | |
| } else { | |
| res.render('desktop.html'); | |
| } | |
| }); |
| var user = { | |
| validateCredentials: function (username, password) { | |
| return ( | |
| (!(username += '') || username === '') ? { error: "No Username Given.", field: 'name' } | |
| : (!(username += '') || password === '') ? { error: "No Password Given.", field: 'pass' } | |
| : (username.length < 3) ? { error: "Username is less than 3 Characters.", field: 'name' } | |
| : (password.length < 4) ? { error: "Password is less than 4 Characters.", field: 'pass' } | |
| : (!/^([a-z0-9_-]+)$/i.test(username)) ? { error: "Username contains invalid characters.", field: 'name' } | |
| : false | |
| ); |
| /*! | |
| * backbone.collectioncache.js v0.0.2 | |
| * Copyright 2012, Tim Branyen (@tbranyen) | |
| * backbone.collectioncache.js may be freely distributed under the MIT license. | |
| */ | |
| (function(window) { | |
| "use strict"; | |
| // Dependencies |
| var mongoose = require('mongoose'); | |
| var Schema = mongoose.Schema; | |
| var assert = require('assert') | |
| console.log('\n==========='); | |
| console.log(' mongoose version: %s', mongoose.version); | |
| console.log('========\n\n'); | |
| mongoose.connect('localhost', 'testing_1088'); | |
| mongoose.connection.on('error', function () { |
This article has been given a more permanent home on my blog. Also, since it was first written, the development of the Promises/A+ specification has made the original emphasis on Promises/A seem somewhat outdated.
Promises are a software abstraction that makes working with asynchronous operations much more pleasant. In the most basic definition, your code will move from continuation-passing style:
getTweetsFor("domenic", function (err, results) {
// the rest of your code goes here.If you must nest functions in a way that requires access to multiple this', alias outer this to something meaningful - describe the value it's holding. Treat this as the invisible first argument.
In general though, avoiding the situation (nested functions and frivolous use of this) will frequently produce clearer results.
I was accidentally included in a discussion on how to best name this in nested functions in JavaScript. +1's were given to this suggestion of using _this.
Giving style advice on naming nested this without a meaningful context isn't too helpful in my opinion. Examples below have been altered to have at least some context, although a completely contrived and stupid one.
| // encode(decode) html text into html entity | |
| var decodeHtmlEntity = function(str) { | |
| return str.replace(/&#(\d+);/g, function(match, dec) { | |
| return String.fromCharCode(dec); | |
| }); | |
| }; | |
| var encodeHtmlEntity = function(str) { | |
| var buf = []; | |
| for (var i=str.length-1;i>=0;i--) { |
| // Short module explanation // Something to gather my thoughts | |
| // // I think this looks cool. | |
| // | |
| module.exports = the_exported_function // Modules are a function. Always. | |
| // | |
| module.exports.extra = extra // Additional API entry points if | |
| module.exports.other = other // desired. | |
| // | |
| var util = require('util') // Other packages from npm or core | |
| var assert = require('assert') // No comma-first due to lots of |