问题Angular-Meteor Meteor.publishComposite

时间:2016-10-14 20:26:31

标签: meteor publish angular-meteor

运行helper时,值会存储在变量verCandidatos.postulados中。

一旦我收到了我需要的信息,我需要获取一个链接的文档(使用函数ng-init="candidato = la postulado.candidato()),该文档在文件helper collection.js上运行。

有时html会正确显示属性:{{candidato.nombre}}{{candidato.apellidos}}{{candidato.sexo}},有时会显示为空,为什么?

很奇怪,就像bug之类的东西。这种行为怎么可能?

正在获取信息,因为ng-repeat起作用并显示元素。

以下是publishComposite(),collection.js,htmljs客户端

html客户端

my-app / imports / ui / components / vacantes / verCandidatos / verCandidatos.html

<div ng-repeat="postulado in verCandidatos.postulados">
    <div ng-init="candidato = postulado.candidato();">
          {{candidato.nombre}} 
          {{candidato.apellidos}}
          {{candidato.sexo}}            
    </div>
</div>
客户

js

my-app / imports / ui / components / vacantes / verCandidatos / verCandidatos.js

imports ...  


class VerCandidatos {
    constructor($scope, $reactive, $stateParams) {
        'ngInject';
        $reactive(this).attach($scope);
        this.vacanteId = $stateParams.vacanteId;
        this.subscribe('vacantes.candidatosOseleccionados', ()=> [{vacanteId: this.vacanteId}, {estado: 1}]);
        this.helpers({
            postulados (){
                return Postulaciones.find();
            }
        });

    }
}

collection.js

my-app / imports / api / postulaciones / collection.js

imports...

export const Postulaciones = new Mongo.Collection('postulaciones');

Postulaciones.deny({...});

Postulaciones.helpers({
    candidato(){
        return Candidatos.findOne({_id: this.candidatoId});
  }  
});

publish.js:

my-app / imports / api / vacantes / server / publish.js

imports...

if (Meteor.isServer) {
    Meteor.publishComposite('vacantes.candidatosOseleccionados', function (vacanteId, estado) {
        const selector = {$and: [estado, vacanteId]};
            return {
                find: function () {
                    return Postulaciones.find(selector);
                },
                children: [
                    {
                        find: function (postulacion) {
                            return Candidatos.find({_id: postulacion.candidatoId}, {
                                fields: {
                                    nombre: 1,
                                    apellidos: 1,
                                    sexo: 1,
                                }
                            });
                        }
                    }
                ]
            };
    });
}

有什么想法吗? - 谢谢,

1 个答案:

答案 0 :(得分:1)

ISSUE位于html 该解决方案被ng-init检测到并直接调用helpers内的collection.js,其他文件(js in clientcollection.jspublish.js)未被修改

html文件如下:

<div ng-repeat="postulado in verCandidatos.postulados">
      {{postulado.candidato().nombre}}
      {{postulado.candidato().apellidos}}
      {{postulado.candidato().sexo}}            
</div>

感谢您的阅读。 我希望你会有用。