NodeJS + JS:根据当前用户选择生成动态链接

时间:2012-07-29 11:13:45

标签: javascript jquery node.js hyperlink dynamic-data

我正在尝试为我博客中的帖子创建一个简单的排序选项。问题是我想要使用的最后一件事是基于JS的重定向,因为有些用户没有在他们的浏览器中启用JS,这就是为什么他们无法在我的博客中对帖子进行排序。让我举个例子:

我的博客中有几个类别:

//categories selection
<ul>
    <li class="active"><a id="cat1" href="/?category=music">Music</a></li>
    <li><a id="cat2" href="/?category=photo">Photo</a></li>
    <li><a id="cat3" href="/?category=cinema">Cinema</a></li>
    <li><a id="cat4" href="/?category=computers">Computes</a></li>
</ul>

另外,我有两个排序选项:

//sorting options
<div>
    <a class="active">Last posts</a>
    <a>Last comments</a>
</div>

取决于当前活动元素,用户在页面上被重定向,具有这样的参数,例如, '/?category = music&amp; sort = posted'或'/?category = personal&amp; sort = commented'。

例如,我们可以在类别选择中选择“CINEMA”标签此时处于活动状态(

<li class="actvie"><a id="cat3" href="/?category=cinema">Cinema</a></li>

)。因此,如果用户单击“上次评论”链接,则应重定向到

'/?category=cinema&sort=comments'

另一个例子:目前最后一条评论是有效的(

<a class="active">Last comments</a>

)。用户点击类别选择中的计算,它应该重定向到

'/?category=computers&sort=comments'.

那么,如果没有JS,是否有任何变体可以执行此类功能?如果不是,你可以建议我最优雅的解决方案,除了手动运行类别中的每个元素并使用JS / jQuery排序选项和生成链接吗?

提前致谢!

服务器端:

db.collection("posts", function (err, collection) {
    //getting posts dependinc on requested category
    collection.find({category: req.query['category']}, {sort: [['time_added', -1]], limit:20}, function (err, posts) {
        //getting posts and rendering page
    });
});

更新:我找到了一个解决方案。对于单独的类别,我渲染两个具有不同帖子列表的div。一个用于'最后发布',第二个 - 用于'最后评论'。排序选择器只隐藏一个div并显示另一个div。问题只是传输到客户端的两倍数据大小。我知道,它需要一点JS,但主要的类别链接将是明确的没有'#' - hrefs。并排序选项 - 它只是一个toogle,它可能没有真正的链接。

2 个答案:

答案 0 :(得分:1)

似乎您正在进行页面刷新以选择新类别。使用选定的类别参数确定排序选项的URL。需要从服务器端获得更多代码,以便为您提供更具体的示例。

如果您不想使用Javascript,则必须根据选择的类别动态生成排序链接<a class="active">Last posts</a>的href属性。你今天如何呈现页面?只是静态文件?看看像mustache.js这样的模板引擎,然后就可以这样做:

<a class="active" href="/?category={{category}}&sort=comments">Last posts</a>

使用mustache.js查看本教程中的Node.js示例 http://mrjaba.posterous.com/a-gentle-introduction-to-nodejs

在您的评论后编辑:或使用EJS

这样的事情
<div>
    <a href="/?category=<%=category%>&sort=posts" class="active">Last posts</a>
    <a href="/?category=<%=category%>&sort=comments">Last comments</a>
</div>

答案 1 :(得分:0)

您是在谈论在客户端或服务器端进行实际排序吗?如果是后者,没有问题;只需坚持使用您拥有的URL并让服务器重写它们并重定向到新的URL(如果您必须这样做;您可以将“较短”的URL视为已排序内容的实际URL)。这绝不是依赖于可用的客户端脚本。

当然,您可以在此之上实现客户端排序,以方便有可用客户端脚本的用户;这里的关键是使用不引人注目的JavaScript(例如,在加载时安装处理程序来拦截排序链接上的点击)。