0

我正在使用流星应用程序的数据表。我的问题是,当某些字段更改时,所有表格都会再次呈现,如果我在表格的第二页上或者我按字段排序,则表格会再次呈现,我又回到了开头。我的代码:

Template.adminpage.rendered = function() {
   $('#userData').dataTable({
        "bDestroy":true,
        "aaSorting": [[ 0, "desc" ]],
        "bAutoWidth":false,
        "bFilter": false,
        "aoColumns": [
            { "bVisible": false },
            null,
            null,
            null,
            null,
            null,
            null,
            null
        ],
        "aaData":  Template.adminpage.arrayUsersAdmin()
    });
}

填充表格的数组:

Template.adminpage.arrayUsersAdmin=function() {
    var adminUsers = allUserData.find({roles: 'basic'});
    var arrayUserAdmin = [];
    var count=0;
    adminUsers.forEach(function(user) {
        var idColumn = user._id;
        var dateColumn=moment(user.createdAt).format("MMM Do HH:mm");
        var usernameColumn=username;
        var emailColumn=email;
        arrayUserAdmin[count]=[
            idColumn,
            dateColumn,
            usernameColumn,
            emailColumn
        ];
        count++;
    });
    return arrayUserAdmin;
}

服务器上的集合:

if(Meteor.users.find({_id: this.userId}, {roles: 'admin'})){
    Meteor.publish("allUserData", function () {
        var self = this;
        var handle = Meteor.users.find({}).observeChanges({
            added: function(id, fields){
                self.added("allUsersCollection", id, fields);
            },
            changed: function(id, fields){
                self.changed("allUsersCollection", id, fields);
            },
            removed: function(id){
                self.removed("allUsersCollection", id); 
            }
        });
        self.ready();
        this.onStop(function() {
            handle.stop();
        }); 
    }); 
}

谢谢你的时间。

4

1 回答 1

1

您可以将reactive: false选项作为选项传递给find,这会禁用依赖项的基础添加,如下所示:

Template.adminpage.arrayUsersAdmin=function() {
    var adminUsers = allUserData.find({roles: 'basic'}, reactive: false);
    // Your code
    return arrayUserAdmin;
}

此处记录了此行为

或者,如果您希望更新各个字段,则必须自己添加它们。为此,您可以使用allUserDate.find({roles: 'basic'}).observe. 但是,这将需要您直接编辑 HTML,而且非常混乱。更好的选择是完全改变你的表结构——不要使用数据表,使用普通的 HTML 表,并使用 minimongo 查询对数据进行排序。

无论如何,您可以像这样使用观察:

allUserData.find({roles: 'basic'}).observe({
    changed: function(newDocument, oldDocument) {
        // Update table
    }
});
于 2013-04-12T09:15:22.653 回答