猫鼬,对象中的数组
Posted
技术标签:
【中文标题】猫鼬,对象中的数组【英文标题】:Mongoose, array in object 【发布时间】:2015-12-28 13:32:07 【问题描述】:更新: 这个问题似乎与猫鼬有关。请参阅底部的更新。
在父级中,我使用以下代码将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
并且不支持这种方式的数组吗?
汽车显然是存在的,但不是作为数组存在的。
关于如何在这个例子中以数组的形式访问汽车有什么想法吗?
谢谢!
更新:
在 react-Tools 中查看 this.context.foo.cars 时,我看到:
cars:
->_proto_ :..
0: "4242594395935934",
1: "3543435095340509"
etc...
cars should be an Array so I would expect to see:
cars: Array[4]
尽管在数据库中一切看起来都应该:
"cars":["5607b0747eb3eefc225aed61","5607b07a7eb3eefc225aed62","5606bf4b0e76916c1d1668b4","5607b07a7eb3eefc225aed62"]]
最后更新: 在这里他们彼此相邻我反应工具: (我有一个驱动程序列表,这表明驱动程序对象在被选中时会发生变化)
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]
因此,当数组被选中时,它会发生一些事情。奇怪...
【问题讨论】:
React 对象可以毫无问题地处理处于其状态的数组,也许你可以在这个问题中添加 moongose 标签,我很确定问题就在那里。 您的意思是cars
不是数组还是this.context.foo.cars
不是数组?
【参考方案1】:
如果您的意思是 cars
不是您期望的数组(而不是 this.context.foo.cars
)...
Array 构造函数构建一个数组,并将构造函数的每个参数作为返回数组中的一个元素。
所以,new Array([1,2,3])
给你:[[1,2,3]]
。
你想要Array.from([1,2,3])
,它会给你[1,2,3]
,这似乎就是你想要的。
https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/Array
但是使用您的代码,为什么不能跳过创建中间数组而直接调用this.context.foo.cars.map(...)
?
【讨论】:
是的,this.context.foo.cars.map(...) 是我的第一次尝试,但它返回:无法读取未定义的属性“地图”。所以我猜汽车不是上面评论所暗示的“正确”数组。 好的,这个答案当时并不适用 - 但我会留下它,因为this.context.foo.cars
是 undefined
而不是其他东西与你的问题非常相关 - 你应该更新详细信息,然后我将删除此答案。
谢谢,我更新了问题以更好地反映实际问题。
你试过var driversCars = [];this.context.foo.cars.forEach(function(car) driverCars.push(<li key=i> car </li>);)
。看起来 mongoosejs 提供了一个 foreach:mongoosejs.com/docs/3.7.x/docs/…
谢谢,但是这个返回不能读取未定义的属性'foreach',我想我在猫鼬中创建数组时一定犯了一个错误,因为汽车看起来不是数组。但我谢谢你。以上是关于猫鼬,对象中的数组的主要内容,如果未能解决你的问题,请参考以下文章