无法从html格式

时间:2015-09-30 03:38:38

标签: angularjs mongoose mean

我正在使用平均堆栈(mongo / mongoose,ember,angular,node)。

数据库包含2个架构

var ChildSchema = new Schema({
    childName: {
        type: String,
        required: true,
        trim: true
    }
});


var ParentSchema = new Schema({
    parentName: {
        type: String,
        required: true,
        trim: true
    },
    child: {
        type: Schema.ObjectId,
        ref: 'Child'
    }
});

mongoose.model('Parent', ParentSchema);
mongoose.model('Child', ChildSchema);

有一个html form允许用户创建一个新的Parent,该表单有一个选择框,其中填充了存储在数据库中并由findChildren()检索的子项功能

HTML在这里:

<section data-ng-controller="ParentController" data-ng-init="findChildren()" >
    <form name="parentForm" class="form-horizontal col-md-6" role="form" data-ng-submit="create(parentForm.$valid)" novalidate>
        <div class="form-group" ng-class="{ 'has-error' : submitted && parentForm.config.$invalid }">
            <label for="child" class="col-md-2 control-label">child</label>
            <div class="col-md-9">
                <select ng-model="parent.child" ng-options="child as child.childName for child in childs"></select>
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-3 col-md-9">
                <button mean-token="'create-submit'" type="submit" class="btn btn-info">Submit</button>
           </div>
         </div>
    </form>
</section>

html form将子项的名称显示为列表中的可选项,当用户按下提交按钮时,节点应用程序中的控制器会收到正确的父对象ID。这是控制器代码

create: function(req, res) {
        var parent = new Parent(req.body);

        parent.save(function(err) {
            if (err) {
                return res.status(500).json({
                    error: 'Cannot save the parent'
                });
            }

            res.json(parent);
        });
    }

问题是我在尝试显示表中的父项列表时无法显示childName。这是HTML。显示所有父母的其他信息

<section data-ng-controller="DevicesController" data-ng-init="findParents()">
    <table border="1" class="mytable">
        <tr>
            <td>oject</td>
            <td>Parent Name</td>
            <td>Child</td>
        </tr>

        <tr ng-repeat="parent in parents">
            <td>{{parent}}</td>
            <td>{{parent.parentName}}</td>
            <td>{{parent.child.childName}}</td>
        </tr>
    </table>
</section>

期望parent.child.childName将显示引用对象的childName。它返回null。如果我显示&#39; parent.child&#39;,它将显示objectID

例如:

  

我有一个叫ChildA的孩子。

     

当我查看html表单以创建父项时,我将输入ParentA作为名称,并从列表中选择ChildA。

     

当我按下提交时,将创建新的父对象。

     

当我查看父列表时,显示的表应显示ParentAChildA的行。

     

现在它显示ParentA和空白

1 个答案:

答案 0 :(得分:0)

parent.child会返回正确的objectid,如果您想获得引用的详细信息,则需要使用populate

我没有看到findParents的相关代码,您基本上会执行以下操作:

    child.findOne({"_id": req.params.id}).populate('parent').exec(function (err, child) {
                if (err) {
                    res.status(403).json({
                        "status": "403",
                        "data": "Forbidden"
                    });
                } else {
                    res.status(200).json({
                        "status": "200",
                        "message": "Success",
                        "data" : child
                    });
                }
   });