为什么我无法按2个字段的差异排序列表
Why am I unable to sort list by difference of 2 fields?
我有一个项目列表。
每个项目有一个喜欢或不喜欢的按钮。我希望按总分排序,即= #喜欢的少#不喜欢的。
我想知道为什么:
- 下面的车把+排序是不工作在客户端,如何使其工作? 如果服务器端解决方案会更好,为什么?(服务器端占用不必要的磁盘空间,从我在其他帖子和过早优化中学到的-是的,我还在早期阶段)
这就是我如何将它存储在items.js中collections (ground 0形式)中的列表中。
var item = _.extend(itemAttributes, {
lovers: [],
likes: 0,
haters: [],
dislikes: 0
//popularity: likes - dislikes I tried inserting in collection but doesnt work too
});
所以我通过handlebar helper +主列表控制器的扩展来排序
这是车把段
Template.registerHelper('popularity', function(likes, dislikes) {
var popularity = likes - dislikes;
return popularity;
这是router.js中的排序器
BestItemController = ItemListController.extend({
sort: {popularity: -1},
nextPath: function() {
return Router.routes.BestItem.path({itemsLimit: this.itemsLimit() + this.increment})
}
});
所以车把popularity
的计算实际上是有效的,受欢迎程度分数出现在{{ popularity 123numbersxx }}
的加法上
然而,排序不工作,可能是因为排序不排序"表面上"的计算,而是对实际的项目和它的字段?
我试图插入一个额外的模式字段(参见上面的注释行)。然而,这导致错误状态likes
没有定义。
有谁能帮我指点一下吗?另外,如果你认为我做事的方法不好,还有其他的方法吗?例如,如果在单个模板helper.js文件上排序,而不是在主路由器.js文件上排序。
多谢!
可以在客户端实现。下面是我要做的:
您可能会使用{{#each item}}
迭代显示要排序的item
。我会用自定义助手替换#each
中的item
,并创建一个函数,使用游标或数组作为参数,该函数将使用当前排序设置对您的项目进行排序。
你的助手可以像这样:
Template.items.helpers({
sortedItems: function(){
return sortMyItems(items.find()) //add .fetch() if you need an array,
//or directly your array if you already have it in a variable.
}
});
在文件的开头,添加sortMyItems
函数,返回已排序的项目列表。
sortMyItems = function(cursor) {
if(!cursor) {
return [];
}
var sortBy = Session.get("sortBy");// in your case, it would be set to "popularity"
var sortAscending = Session.get("sortAscending ");
if(typeof(sortAscending) == "undefined") sortAscending = true;
var sorted = [];
var raw = cursor.fetch();
// sort
if(sortBy) {
sorted= _.sortBy(raw, sortBy);
// descending?
if(!sortAscending) {
sorted= sorted.reverse();
}
}
return sorted;
}
这里我使用会话变量,但我建议你使用响应变量或响应字典,因为这是一个只与当前视图相关的特性。
相关文章:
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- jQuery拖动到相对位置的可排序列表中时出现可拖动辅助对象位置问题
- jQuery带计数器的可排序列表
- 我们可以在 CouchDB 中对排序列表视图进行排序吗?
- SharePoint :按日期排序列表
- jQueryUI可排序-从可排序列表中删除li
- Rails3-可排序列表不能与wysihtml5一起工作
- 如何同步包含克隆元素的jquery可排序列表
- 无法将id放在Jquery插件生成的模式中的未排序列表上
- 为未排序列表设置onclick()属性
- Mvc4将Jquery可排序列表项的顺序保持到控制器
- 无法从jQuery可排序列表中删除新添加的项
- iframe内容可编辑,位于jqueryUI可排序列表项中
- 对象的数组列表的Javascript排序列表-基于特定的数组列表
- 动态生成<选择>未显示已排序列表中的第一个项目
- 从 ajax 调用到 jquery UI 可排序列表构建 html
- 使用 jqueryui 的多个可排序列表 - 不希望项目在列表组之间混合
- jQuery - 获取可排序列表的索引
- jQuery - 排序后更新可排序列表
- YUI 轮播导航按钮在排序列表下