使用mongodb和骨干模型我试图将输入值存储为模型中的数组?
所以在准系统中,让我说我有一个小小的形式。
<form id="send-message">
<input name="message" class="message"/>
<button type="submit" class="send">Send</button>
</form>
然后在我的包含此表单的视图的骨干代码中,我提交了这些数据。我正在使用socket.io所以我有一些像这样的代码。我不认为发布此视图的完整代码是必要的,但我希望这可以防止混淆。
var Marionette = require('backbone.marionette'),
MessagesView = require('./messages'),
UsersListView = require('./users_list'),
socket = io.connect();
module.exports = ChatView = Marionette.ItemView.extend({
template: require('../../templates/chat.hbs'),
events: {
'submit #send-message': 'sendMessage'
},
initialize: function() {
var self = this;
this.messagesView = new MessagesView({ collection: window.App.data.messages });
this.usersListView = new UsersListView({ collection: window.App.data.messages });
socket.on('new message', function(data) {
self.createMessage(data);
});
},
onRender: function() {
this.messagesView.render().$el.appendTo(this.$el.find('.message-content'));
this.usersListView.render().$el.appendTo(this.$el.find('.users-list'));
},
sendMessage: function(e) {
e.preventDefault();
var $message = this.$el.find('input.message');
socket.emit('send message', $message.val());
$message.val('');
},
createMessage: function(data) {
var model = window.App.data.messages.where({username: data.username});
_.each(model, function(model) {
var values = {
message: data.message
}
model.save(values);
});
window.App.core.vent.trigger('app:log', 'Add View: Created a new message!');
}
});
总而言之,这只是将输入数据提交给节点服务器,然后服务器发出响应并触发createMessage
。
我的问题是我想捕获所有这些消息并将它们作为数组存储在模型中。所以数据结构看起来就像这样。
// This represents the ideal structure of the model at barebones
var user = {
username: 'Grant',
message: {message1: "Hey guys", message2: "Michigan State will win the tourney"}
}
让我们仔细看看createMessage
方法..你看我保存了如下所示的消息,但我不确定如何获取已保存在该模型上的消息然后附加一条新消息,从而创建一个阵列。我会像现在一样离开它,但我尝试使用.push()
函数并尝试各种方法都失败了......
createMessage: function(data) {
var model = window.App.data.messages.where({username: data.username});
_.each(model, function(model) {
var values = {
message: data.message
}
model.save(values);
});
window.App.core.vent.trigger('app:log', 'Add View: Created a new message!');
}
数据转到mongodb所以我也有一个控制器处理和(我认为)覆盖了backbone.sync,但是当发出PUT请求时,路由器会触发控制器app.put('/api/messages/:id', messages.update);
然后{{1方法处理数据,所以我可以在这里创建数组。
update
编辑:考虑到这一点,我确实希望生成一个对象数组。我最大的问题是找出如何附加新对象并生成新密钥?
例如
update: function(req, res) {
models.Message.update({ _id: req.params.id }, {message: req.body.message //Somewhere here I could append?}, function(err, message) {
if (err) {
res.json({error: 'Update failed.'});
} else {
res.json(message);
}
});
}
用户提交新消息,如何使用新密钥创建对象,我尝试使用骨干来获取对象的var user = {
username: 'Grant',
message: {message1: "Hey guys"}
}
,但这有点毛茸茸,因为现在这主要是基于香草的..
答案 0 :(得分:1)
你想要做的是一个对象,而不是一个数组 - 这就是为什么.push()
不起作用。
function(value) {
user.message['message' + (Object.keys(user.message).length + 1)] = value;
}
这将为对象添加一个新值,其中包含“消息”键+ 旧'消息量'。