2012-07-29 91 views
0

我试图为博客中的帖子创建一个简单的排序选项。问题是我想要使用的最后一件事是基于JS的重定向,因为有些用户在其浏览器中没有启用JS,这就是为什么他们不能在我的博客中对帖子进行排序。我给大家举一个例子:NodeJS + 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> 

Depening当前活跃的元素,用户被重定向在页面上使用这些参数,例如'/?category = music & sort = posted'or'/?category = personal & 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,它可能没有真正的链接。

+0

如果你决定这样做,你实际上可以使用CSS而不是Javascript来在两者之间切换。在CSS中查看:focus,:active或:target选择器。这是一个例子http://www.w3.org/Style/Examples/007/target#item2 – 2012-07-29 12:58:49

回答

1

看起来像你正在做一个页面刷新选择一个新的类别。使用选定的类别参数来确定排序选项的URL。您需要从服务器端获得更多的代码,以便为您提供更具体的示例。

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

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

看一看本教程使用小胡子的Node.js的例子。您的评论后,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> 
+0

那么。我更新了我的帖子。然而,那里绝对没有任何特别的技巧。我只是解析“类别”和“排序”参数,并根据它我呈现与请求的帖子页面。请注意,我还没有完成后端排序选项,这就是为什么我没有将其包含在我的代码中。 – f1nn 2012-07-29 12:20:51

+0

如果您不想使用Javascript,则必须根据选择的类别动态生成排序链接Last posts的href属性。你今天如何渲染页面?只是静态文件?看看像mustache.js这样的模板引擎,然后你可以这样做:Last posts 2012-07-29 12:25:59

+0

如果事实上我很熟悉EJS模板引擎。问题是在渲染过程中,我必须为类别渲染“硬”链接,并且在用户更改“排序”选项之后,类别链接应该被修改。没有JS我不知道该怎么做。 – f1nn 2012-07-29 12:39:40

0

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

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