Skip to content

Instantly share code, notes, and snippets.

@lukemorton
Created February 16, 2011 00:23
Show Gist options
  • Save lukemorton/828585 to your computer and use it in GitHub Desktop.
Save lukemorton/828585 to your computer and use it in GitHub Desktop.
JS ecosystems
<!doctype html>
<html>
<head>
<title>Messages</title>
<meta charset="utf-8" />
</head>
<body>
<ul id="messages">
<li id="message-1">
<div class="message">Message</div>
<div class="controls"><a href="/edit/1">Edit</a> <a href="/delete/1">Delete</a></div>
</li>
<li id="message-2">
<div class="message">Message</div>
<div class="controls"><a href="/edit/2">Edit</a> <a href="/delete/2">Delete</a></div>
</li>
</ul>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script>
jQuery(function ($) {
// HTML messages scope stored in a jQuery object
var $messageList = $('#messages');
// HTML message scope, for every message
var $messages = $messageList.children();
// Mock XHR
$.get = function (url, callback) {
if (url.indexOf('edit') > -1) {
callback('<form><h2>Edit</h2><input type="submit" value="save" />');
} else {
callback('success');
}
};
$messages.each(function () {
// Individual message scope
var $message = $(this);
// Delegate control links to the control
$message.find('.controls')
.delegate('a', 'click', function (e) {
// Individual link scope
var $link = $(this);
var linkText = $link.text();
// Prevent Event, maybe we should call this, Preevent
e.preventDefault();
// Send request via XHR GET
$.get($link.attr('href'), function (response) {
// Handle response depending on request type (e.g. Edit or Delete)
if (linkText === 'Edit') {
// For edit, response will be the edit form
$message.html(response);
} else if (linkText === 'Delete') {
// For delete, response will simply indicate success or failure
if (response === 'success') {
$message.remove();
$messageList.before('<div class="success">Message Deleted</div>');
} else {
$messageList.before('<div class="error">Message could not be Deleted</div>');
}
}
});
});
});
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment