Обновление: Эта проблема, похоже, связана с mongoose. См. Обновление внизу.Mongoose, array in object
В родителю я использую следующий код, чтобы передать choosenItem
в Внук:
childContextTypes: {
foo: React.PropTypes.object.isRequired,
},
getChildContext: function() {
return { foo: this.state.choosenDriver }
},
choosenDriver является mongoose
модель, которая выглядит следующим образом:
var Schema = mongoose.Schema;
var driverSchema = new mongoose.Schema({
driver: String,
age: String,
cars: [{ type: Schema.Types.ObjectId, ref: 'Car' }]
});
module.exports = mongoose.model('Driver', driverSchema);
Это прекрасно работает и в Grandchild Я могу сделать следующее:
contextTypes: {
foo: React.PropTypes.object.isRequired,
},
//some other stuff...
render: function(){
return (
<h1>{this.context.foo.name}</h1>
)
});
И это отображает имя choosenDriver
.
Я также хотел бы, чтобы перебрать автомобилей и думал, что это можно было бы сделать так:
render: function(){
var cars = new Array(this.context.foo.cars);
var driversCars = cars.map(function(car,i){
return <li key={i}> {car} </li>;
});
return (
<div>
<h1>{this.context.foo.name}</h1>
<ul>{driversCars}</ul>
</div>
)
}
});
Это возвращает все драйверы автомобилей в строке отображается на одной строке. Я взглянул в инструмент реагирования разработчиков и увидел, что автомобили не определены как Массив.
Возможно ли это потому, что choosenDriver
является state
, и массивы не поддерживаются таким образом?
Автомобили, очевидно, существуют, но не как массив.
Любые идеи о том, как получить доступ к автомобилям в качестве массива в этом примере?
Спасибо!
Update:
При взгляде на this.context.foo.cars в реагирующих-Tools я вижу это:
cars:
->_proto_ :{..}
0: "4242594395935934",
1: "3543435095340509"
etc...
cars should be an Array so I would expect to see:
cars: Array[4]
Allthough в everythingg DB выглядит, как должно:
"cars":["5607b0747eb3eefc225aed61","5607b07a7eb3eefc225aed62","5606bf4b0e76916c1d1668b4","5607b07a7eb3eefc225aed62"]}]
Последнее обновление: Здесь они находятся рядом с eachother, я реагирую Tools: (У меня есть список драйверов, и это показывает, что объект-драйвер меняет, когда i t выбирается)
State:
choosenDriver: {..}
_v:0
_id: "235345353453"
name: "Roger"
cars:
->_proto_ :{..}
0: "4242594395935934",
_id: undefined
Same driver but not choosen:
drivers: array[3]
->0: {}
->1: {}
_v: 0
_id: "4242594395935934"
cars: Array[1]
Так что что-то происходит с массивом, когда он выбирается. Weird ...
Объект React может обрабатывать массивы в их состоянии без проблем, возможно, вы можете добавить тег moongose на эти вопросы, я уверен, что проблема там. –
Вы имеете в виду 'cars', это не Array или' this.context.foo.cars' не является массивом? – pherris