Этот код Метеор пытается вернуть курсор во встроенные документы, на которые ссылается поле data
, а затем проверяет, существует ли он (потому что иногда он не существует в ActiveTaskCol
), прежде чем возвращать этот вспомогательный метод шаблона.Возвращает встроенный документ из коллекции find
добавлены позже
Ожидаемый возвращен курсор будет использоваться в HTML {{данных #each}} для получения дополнительной работы, следовательно, использование .find
вместо .findOne
.
Проблема заключается в том, что если оператор имеет значение истинно, даже если нет data
поле в ActiveTaskCol
, я также попытался obj.count() > 0
, который также верно, даже если поле «данные» не существует в коллекции.
Как я могу это исправить? Благодаря
Template.index.helpers({
taskInputs: function() {
var ready = Meteor.subscribe('inputsCol').ready();
var data = InputsCol.find({});
var selectedTask = Session.get('taskSelected');
var obj = ActiveTaskCol.find({action: selectedTask}, {field: {data: 1}});
if (typeof obj != 'undefined') { //<-always true --------------
return {items: obj};
} else {
return {items: data, ready: ready};
}
}
});
Поскольку мне нужно вернуть {пункты: OBJ}, если поле данных существует, вы имели в виду, если (объект), так что будет гарантировать, что это не (неопределенный, нулевой , ложный)? вместо того, что вы набрали, если (! obj)? thx –
Вы правы. Извини за это. – Kishor
Причина, по которой я использовал find вместо findOne, заключается в том, что мне нужен помощник шаблона, чтобы вернуть курсор, чтобы использовать html-шаблон {{#each data}}. Кроме того, мне нужно получить курсор для встроенного документа, на который ссылаются поле «данные», а не документ верхнего уровня. постскриптум thx для быстрого исправления! obj :) –