Маршрутизатор не получает объект коллекции для маршрутизации в документ коллекции
Я столкнулся с недавней проблемой, когда у моего маршрутизатора, кажется, нет коллекции для маршрутизации имени.
У меня есть коллекция с именем Nodes. В этой коллекции есть много чтения из многих узлов с различными видами данных в каждом узле. Хотя атрибут имени для этих узлов не уникален (используется simpleSchema). Это тот конкретный узел может отправлять много точек данных. Позже я буду графически эти данные из коллекции. Вставка узлов
var sampleInput_4 ={
name : "Tulsa Node",
longitude : -95.982,
latitude : 36.137,
humidity : 78,
tem p: 80,
dew : 20,
pressure : 32,
speed : 12,
direction : 60
};
Но таких вставок может быть тысячи. И тысячи разных узлов вставок. Я публикую всю коллекцию узлов и в боковой панели JS файл подписаться на Создан для всей коллекции. это только для проверки этой проблемы. вот файл боковой панели js.
Template.sidebar.helpers({
nodes: function(){
var col= Nodes.find().fetch();
return _.uniq(_.pluck(col,'name'));
}
});
Template.sidebar.onCreated(function () {
this.subscribe('nodes');
});
Это прекрасно работает в HTML, загружая только уникальные имена, как я хочу.
{{#each nodes}}
<li>
<a href="{{pathFor 'NodePage'}}">
{{this}}
</a>
</li>
{{/each}}
Однако это не путь, которым я хочу. Там на самом деле нет маршрута, когда я делаю это таким образом. Я хочу, чтобы маршрут был / имя уникального имени. Не имеет значения, какое название какого документа. просто уникальное имя любого из тех, на которые я нажал. Вот роутер
Router.route('/:_id', {
name : 'NodePage',
data : function() { return Nodes.findOne(
// this refers to the currently matched
//route.this.params access parts of route
this.params._id);
}
});
Хотя, если я поставлю
return Nodes.find();
в боковой панели js файл для возврата работает маршрут. Я пропускаю какой-то фундаментальный аспект железного роутера? Также боковая панель после этого просто возвращает каждый [объект] во всей коллекции. Хотя вы можете нажать на них, и маршрутизатор работает на них.
1 ответ
Оказалось, что Маршрутизатор использует атрибут имени, необходимый для извлечения его из объекта, поэтому я отправил массив объектов через каждый код в HTML. Так что помощнику просто нужно было сформировать массив объектов с уникальными именами для возврата.
Template.sidebar.helpers({
nodes : function() {
//make array to hold objects
var myObjectArray = [];
// grab entire collection
var nodeCollection = Nodes.find().fetch();
// Get the unique names from collection
var nodeNames = _.uniq(_.pluck(nodeCollection,'name'));
// find the Node with that name and
// place into object array loop till done
for(i = nodeNames.length; i>0; i--){
var arrayItem = nodeNames[i-1];
var nodeObject = Nodes.findOne({name: arrayItem});
myObjectArray.push(nodeObject);
}
return myObjectArray;
}
});