繁体   English   中英

Meteor.js和不改组

[英]Meteor.js and non shuffling each

我在通过反应式集合实现非改组时遇到问题。 我的意思是说我有一个按分数值排序的集合,即使分数发生变化,我也不想更改顺序。 我希望它是被动的,但列表项每次都不会改变位置。

当前代码是这个

ListController = FastRender.RouteController.extend({
find: function (tag){
    if(!!tag){
        return Lib.Items.Tags.SupportedType[tag].find;
    }
    return {};
},
findOptions: function(order, pageNum) {
    var findOption = { limit: Lib.Items.Settings.ItemsPerPage * (parseInt(pageNum) || this.increment)};
    if(!!order){
        _.extend(findOption, Lib.Items.ListOrders.SupportedType[order].findOption);
    }
    return findOption;
},
waitOn: function() {
    return [
        Meteor.subscribe('items.all', this.params.tag, this.params.order, this.pageNum),
    ];
},
data: function () {
    return {
        "items": Items.find(this.find(), this.findOptions(this.params.order, this.params.pageNum))
    };
},
action: function(){
    this.render();
}
});
[...]

this.route('list', {
    path: '/list/:pageNum?',
    controller: ListController
});
this.route('list_order_limit', {
    path: '/list/order/:order/:pageNum?',
    controller: ListController
});
this.route('list_tag_limit', {
    path: '/list/tag/:tag/:pageNum?',
    controller: ListController
});
this.route('list_tag_order_limit', {
    path: '/list/tag/:tag/order/:order/:pageNum?',
    controller: ListController
});

{{#each items}}
        {{> item}}
{{/each}}

这样,一切正常,但是列表更改顺序(这是正确的,但不是我想要的行为)。 我尝试了一些不同的解决方案,但没有任何效果。 我从修改数据开始。 我放

data: function () {
return {
    "items": Items.find(this.find(), this.findOptions(this.params.pageNum))
};
},

通过这种方式,数据对订购一无所知(只有订阅者知道哪个订购用于获取第一批商品)。 问题在于,即使路由从一个顺序更改为另一个顺序,列表也不会更新。 在发生这种情况的同时,我看到订阅被新的order参数调用(因此,通过ddp发送的数据实际上应该是正确的)。 我什至尝试停止并重新订阅,但没有任何变化。 我做错了什么? 有没有更好的方法来使列表在其项目中反应而不是在其顺序中反应? 提前致谢。

我在您的代码中看不到任何通过得分值明确引用顺序的内容; 但是我相信这是Meteor中一个未解决的问题: https : //github.com/meteor/meteor/issues/1276

该线程中建议的解决方法之一是在客户端上通过_id添加显式排序,这将确保即使项发生更改,游标也是稳定的。

我可以想象出一种更常规的方法来解决此问题,该方法是在publish函数中计算所需的顺序,并使用publish API将自定义字段发送到客户端,然后按这些字段进行排序。 这比光标要复杂得多,但是会导致项目以发布时确定的确切顺序显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM