如果对 Rails 有足够的了解,您可能会注意到其中的几个定制帮助程序函数。从中可以看到四处很明显的动态内容,我需要使用 JavaScript 为每个加载的页面替换这些内容:三处登录,一处会员图像。此处的 JavaScript 代码对 handle_cached_user 函数作了一处修改,并且还含有一个为动态用户处理页面更新的方法。针对本文的具体情况,我稍微对这段代码做了少许简化。可以将如下函数添加到 application.js 文件中:
清单 8. 替换用户 partial 的元素
function handle_user_partial() {
var login_cookie = readCookie('login');
var image_cookie = readCookie('image');
var profileLink = document.getElementById('profile_link');
profileLink.href = '/member/' + login_cookie;
document.getElementById('bold_link').firstChild.nodeValue=login_cookie;
document.getElementById('not_mine').firstChild.nodeValue="Not " + login_cookie + "?";
document.getElementById('link_for_member_thumbnail').href="/member/" + login_cookie;
document.getElementById('member_thumbnail').src=image_cookie.replace(/%2[Ff]/g,"/");
document.getElementById('member_thumbnail').alt=login_cookie;
}
在清单 8 中,这个 JavaScript 函数首先读取此 cookies 并获取 DOM 树的一部分:即到当前的用户配置文件的链接,称为 profile_link。然后是 handle_user_partial 函数:
将登录用户的名称(存储在 login_cookie 内)替换成 my_login 以为用户配置文件页创建正确的 URL。 将登录用户名插入到 DOM 元素中,此元素使用粗体文本表示登录用户。 将简单的句子 “Not login?” 插入到 DOM 元素中,这个元素包含 login partial 中的 logout 标题。 找到包含会员图像的 dom 元素,将一般图像的 URL 替换成会员图像的 URL,会员图像保存在 image_cookie 中。 此外,还要将此图像的 alt 标记替换成 login 名称,以防图像不出现。在 DOM 中导航时,会发现有时需要直接转到 DOM 元素,而有时又需要转到该元素的特定子元素,比如在处理文本的时候。我就使用了 firstChild 函数根据需要寻找 DOM 元素的第一个子元素。由于语法更为友好,所以 Prototype 库使处理特定的 DOM 元素较为容易一些,但这超出了本文的讨论范围。
我已经创建好了所有的 cookies,最后一步就是从 handle_cached_user 函数调用 JavaScript。请记住,该函数在 public/javascripts/application.js中:
清单 9. 将 handle_user_partial 函数添加到 handle_cached_user
function handle_cached_user() {
var login_cookie = readCookie('login');
var logged_in = document.getElementById('logged_in');
var logged_out = document.getElementById('logged_out');
if(login_cookie == null) {
logged_in.style.display = 'none';
logged_out.style.display = 'block';
} else {
handle_user_partial();
logged_out.style.display = 'none';
logged_in.style.display = 'block';
}
}










