2016-06-27 1 views
0

를 사용하여 반환하지 않는 결과를 구독 나는 다음과 같은 코드가 있습니다 유성이 게시 및 선택

import { Meteor } from 'meteor/meteor'; 
import { Items } from './collection'; 

    if (Meteor.isServer) { 
     Meteor.publish('items', function(options, owner) { 

     let selector = { 
      $and: [{ ownerId: owner}] 
     } 

     return Items.find(selector, options); 

     }); 
    } 

그리고 내가 가지고있는 클라이언트 측

가 :

this.subscribe('items',() => [{ 
     limit: this.getReactively('querylimit'), 
     sort: {dateTime: -1} 
    }, 
    this.getReactively('ownerId') 
    ]); 

위의 결과를 반환하지 않습니다. 그러나, 다음 문장으로 바꾸면 작동합니다!

return Items.find({ ownerId: '7QcWm55wGw69hpuy2' }, options); //works !!! 

저는 Mongo/Meteor 쿼리 선택기에 익숙하지 않습니다. 쿼리를 Items.find()에 변수로 전달하면 뭔가가 엉망이되는 것 같습니다. 누군가 나를 알아낼 수있게 도와주세요.

감사

답변

0

당신은 작동하지 않습니다 선택기로 함수를 전달하는 데 노력하고있다. 함수를 직렬화하여 클라이언트에서 서버로 보낼 수 없습니다. 대신 optionsowner을 별도로 평가해야합니다. 다음은 그 예이다 : 게시 된 문서는 당신이 limit을 사용하지 않는, 그래서 sort 여기에 도움이되지 않습니다,하지 arrive in sorted order

var owner = this.getReactively('ownerId'); 
var options = { 
    limit: this.getReactively('querylimit'), 
    sort: {dateTime: -1} 
}; 

this.subscribe('items', options, owner); 

하는 것으로.

소유자 또는 쿼리 제한이 변경된 후 다시 구독해야하는 경우 autorun을 구독해야합니다.

Meteor.publish('items', function(options, owner) { 
    // DANGER! Actually check this against something safe! 
    check(options, Object); 

    // DANGER! Should any user subscribe for any owner's items? 
    check(owner, Match.Maybe(String)); 

    // Publish the current user's items by default. 
    if (!owner) { 
    owner = this.userId; 
    } 

    return Items.find({ ownerId: owner }, options); 
}); 
+0

감사 :

여기에 향상된 구현의 시작입니다. 나는 지금 당장 모바일에서 작동하고 있으므로 지금은 확인할 수 없습니다. 그러나, 왜 나는 인수를 인쇄하기 위해 서버 측에서 console.log를 사용할 수 있었는지 궁금합니다. console.log (selector)는 두 번째 return 문에 붙여 넣은 ownerId 문자열을 인쇄합니다. – Neo

+0

원래 질문을 잘못 읽고 약간 변경했습니다. –

+0

다시 한번 감사 드리지만,이 문제는 해결되지 않는 것 같습니다. – Neo