도움말! 내 앱에서 매우 이상한 일이 일어나고 있습니다.
와이즈 비즈가있다
리뷰어 수를 표시해야하는 템플릿.
아래는 템플릿 모양입니다 :
merchantReview
그리고 도우미 코드는 다음과 같습니다 :
<template name="merchantReview">
<div> {{numberOfReviewers}} Total</div>
이것은
Template.merchantReview.helpers({
'numberOfReviewers': function () {
var numberOfReviewers = 0;
var merchantProfileId = Session.get('offerUserId2');
console.log("The numberOfReviews _id session is: " + merchantProfileId );
merchantReviews.find({_id: merchantProfileId}).map(function (doc)
{
numberOfReviewers += doc.noOfReviewers;
});
return numberOfReviewers;
}
});
에 아무것도 산출하지 않습니다
전혀 페이지가 없습니다.
라우터를 살펴 보자 :
merchantReview
구독 대상 :
Router.route('/merchantReview/:_id', {
template: 'merchantReview',
data: function(){
},
waitOn: function(){
return Meteor.subscribe('merchantReviews');
}
});
이제 "뭔가 이상한 것"부분입니다. 크롬 브라우저 콘솔 에서이 코드 (헬퍼 코드와 유사)를 실행하면 혼합 결과가 나타납니다.
아래를 실행할 때 :
Meteor.publish('merchantReviews', function publishmerchantReviews(){
return merchantReviews.find();
});
... 수익률 :
var numberOfReviewers = 0;
var merchantProfileId = Session.get('offerUserId2');
console.log("The _id is: " + merchantProfileId );
merchantReviews.find({_id: merchantProfileId}).map(function (doc)
{
numberOfReviewers += doc.noOfReviewers;
});
console.log (numberOfReviewers);
보시다시피
The _id is: udEnfEmy5DSBvDsSy
0
를 우회합니다.
검색어.
그러나 코드를 약간 변경하고 실행하는 경우 :
merchantReviews.find
이번에는 수익이 발생합니다 :
var numberOfReviewers = 0;
var merchantProfileId = Session.get('offerUserId2');
console.log("The _id is: " + merchantProfileId );
merchantReviews.find({_id: "udEnfEmy5DSBvDsSy"}).map(function (doc)
{
numberOfReviewers += doc.noOfReviewers;
});
console.log (numberOfReviewers);
이상하지 않나요?
왜
The _id is: udEnfEmy5DSBvDsSy
93
를 설명 할 수 있습니까?
쿼리가
merchantReviews.find({_id: merchantProfileId})...
를 인식하지 못합니다
merchantProfileId
를 보유하는 변수
값? 이 문제를 어떻게 해결합니까?
udEnfEmy5DSBvDsSy
- 답변 # 1
- 답변 # 2
커서에서 .count ()를 사용하여 도우미를 단순화하고 속도를 높일 수 있습니다. 의견에서 언급했듯이 귀하의
offerUserId2
세션 변수는 배열을 반환하고[0]
를 사용하여 첫 번째 요소를 참조 할 수 있습니다 :Template.merchantReview.helpers({ numberOfReviewers() { return merchantReviews.find(Session.get('offerUserId2')[0]).count(); } })
- 답변 # 3
문제는 고전적인 자바 스크립트 비동기 문제입니다. 코드를 보면
merchantReviews.find({_id: "udEnfEmy5DSBvDsSy"}).map(function (doc) { numberOfReviewers += doc.noOfReviewers; }); console.log (numberOfReviewers);
numberOfReviewers에 추가는 merchantReviews.find ()의 콜백에서 발생합니다. 일반적으로 나중에 발생합니다. console.log가 그 전에 발생했을 가능성이 높은 이유를 설명합니다. 코드를 이것으로 변경하면 일관된 결과를 얻을 수 있습니다.
merchantReviews.find({_id: "udEnfEmy5DSBvDsSy"}).map(function (doc) { numberOfReviewers += doc.noOfReviewers; console.log (numberOfReviewers); });
이 방법을 생각하면 자바 스크립트 시간에는 페이지가 아닌 오른쪽으로 이동합니다. 따라서 콜백의 일부인 들여 쓰기 된 코드 (오른쪽으로 들여 쓰기)는 맨 아래의 코드 다음에 발생합니다.
관련 자료
- r - summarise ()는 변수를 인식하지 못합니다
- sql - MySQL은 CTE 내부에 변수를 설정했습니다 "select"는 괜찮지 만 "set"은 작동하지 않습니다
- mysql - 내부 변수가있는 쿼리가 코드 분석에서 오류를 발생시킵니다
- javascript - 버튼 클릭 기능이 HTML 변수에서 작동하지 않습니다 | 어떻게 고칠까요?
- node.js - firebase 로컬에서 구성 변수 사용이 작동하지 않습니다오류 - 격자 무늬 '비밀'누락
- postgresql - Docker가 네트워크를 인식하지 못하는 이유는 무엇입니까?
- Spring Boot @Valid는 @NotBlank의 메시지를 표시하지 않습니다
- c++ - 참조로 전달 했는데도 변수 값이 변경되지 않는 이유
- windows - SanDisk SSD 대시 보드가 SanDisk SSD Plus 240GB를 인식하지 못합니다
- sql : 긴 쿼리의 일부인 경우 업데이트가 작동하지 않습니다.
- postgresql - 이것이 postgres에서 유효한 쿼리 인 이유는 무엇입니까? dbms 비용이 많이 듭니까?
- visual studio code - VSCode가 파이썬 인터프리터를 인식하지 못합니다
- C #에서 mysql 쿼리를 만들고 변수에 저장하는 방법은 무엇입니까?
- python - query 함수에서 변수 사용
- Pandoc은 문서화 된 '--defaults'옵션을 인식하지 못합니다
- sql server - 이 필드를 int에서 date로 변환 한 후에도 WHERE 절이 필드를 날짜로 인식하지 못하는 이유는 무엇입니까?
- sql server - 업데이트 쿼리는 아무것도 변경하지 않고 오류를 표시하지 않습니다
- java - 컴파일러가 nextLine () 값을 문자열로 인식하지 못하는 것 같습니다
- python - textreplace ( "old", "new")가 텍스트 변수를 변경하지 않는 이유는 무엇입니까?
- HUE를 사용하여 Impala 쿼리에서 변수를 어떻게 설정합니까?
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
변수가 쿼리에서 인식되지 않는 이유는 변수가문자열형식 대신배열형식이기 때문입니다.
나는console.log("The _id is: " + merchantProfileId );
에 의해 이것을 깨달았다이것은 때때로 다음을 산출합니다 :
toString()
를 사용하여 문자열이 배열이 아닌 변수가되도록 변수를 살균하여 문제를 해결했습니다. 기능. 그래서 코드에서 :merchantProfileId.toString();
다음은 코드의 전체 해상도입니다 :
결과 :