返回的游标数组不会显示任何结果

returning array of cursors does not show any result

本文关键字:显示 任何 结果 游标 数组 返回      更新时间:2023-09-26

im试图解决一个"加入";通过这样做的两个集合:

foundUsers: function()
    {
        var searchUser = Session.get("searchUser"); // user search criteria
        var usf = User.find(searchUser, {}); // get user results
        
        var typeId = usf.map(function(p) { return p.us_ut_id }); // get type ids
        
        var tyf = Type.find({_id: {$in: typeId}}, {}); // new Meteor.Collection.ObjectID("533d63bef0e236f9d76db905")
        
        var typeName = tyf.map(function(p) { return p.ut_name.toString() }); // check type names
        console.log(typeName);
        
        return [usf, tyf];
    }

我的html字段中的结果只是空白字段,没有错误消息,所以我做得不对吗?

这样做的目的是使用typeId中的_id数字来获得以html形式显示的用户的正确类型

return usf;//这将返回没有类型的所有用户

return tyf;//这将返回没有用户的所有类型

更新1:

模板如下所示:

<template name="getResult">
    {{#each foundUsers}}
        <input type="text" id="firstname" value="{{us_firstname}}"/><br>
        <input type="text" id="lastname" value="{{us_lastname}}"/><br>
        <input type="text" id="typename" value="{{us_ut_name}}"/><br>
    {{/each}}
</template>

us_xxx应该查找诸如名称之类的用户数据。us_ut_name应该显示通过从us_ut_type获得的ObjectID获得的类型的名称。

更新2:

所以我做了这样的代码,我相信它应该可以工作,因为它在控制台中打印正确的数据:

// display user data
    Template.getResult.helpers(
    {
        foundUsers: function()
        {
            var selector = Session.get('searchUser');
            var users = User.find(selector).fetch();
            
            return _.each(users, function(user)
            {
                console.log(user);
                var result = user.us_ut_name = Type.findOne({_id: new Meteor.Collection.ObjectID(user.us_ut_id._str)}).ut_name;
                console.log(user.us_firstname + ", " + result);
                return result;
            });
        }
    });

但结果没有显示在页面上。

该打印例如:

约翰,理发师

木匠mike

雄鹿、小狗

在控制台中,但不在网站的输入字段中。

解决方案:

Template.getResult.helpers(
    {
        foundUsers: function()
        {
            var selector = Session.get('searchUser');
            var users = User.find(selector).fetch();
            _.each(users, function(user)
            {
                console.log(user);
                var result = user.us_ut_name = Type.findOne({_id: new Meteor.Collection.ObjectID(user.us_ut_id._str)}).ut_name;
                console.log(user.us_firstname + ", " + result);
                return result;
            });
            return users;
        }
    });

感谢David Weldon

如果我正确理解您的模型,这可能会起作用:

foundUsers: function() {
  var selector = Session.get('searchUser');
  var users = User.find(selector).fetch();
  _.each(users, function(user) {
    return user.tyf_type = Type.findOne(user.us_ut_id).ut_name.toString();
  });
  return users;
}

它使用给定的选择器获取用户,然后通过添加tyf_type属性来修改每个用户。唯一的缺点是它使用fetch,每次用户更改时都会重新绘制整个列表。