使用要保存在集合中的“新对象”时,正确的方法是什么。说我有一个收集汽车。我有/汽车/新车 url然后是一个表单:
名称:__
部分:此处的部件清单
如果我想让这个形式“反应”,在某种意义上说,如果我在部件数组中添加一个新部件,它表示重新渲染是使整个“汽车”成为反应对象的最佳方法。或者应该只在dom中添加一个新行?
我不想自动将整个内容插入“Cars”集合,直到它有一个名称和一个部件列表。
大多数示例显示添加到集合中非常简单 - >重新渲染DOM非常简单。
编辑:编辑汽车时可能适用相同的概念。从集合中获取汽车,设置所以返回的对象是被动的(所以我可以添加/删除部件)完成后获取所有值并存储编辑的汽车信息。
答案 0 :(得分:1)
首先初始化一个"空"汽车作为反应变量。
Template.cars.onCreated(function () {
this.car = new ReactiveVar({}); // empty car
});
假设你的dom在每个字段上都有某种属性来描述它是哪个键:
<input data-key="name" placeholder="Car name"/>
然后,您可以绑定将使用此数据的事件来更新反应变量。
Template.cars.events({
'change input': function (e, template) {
template.car.set(_.extend(template.car.get(), {
[$(e.target).data('key')]: $(e.target).val()
}));
}
});
这将在您填写输入时构造对象。
答案 1 :(得分:0)
考虑为您的/ cars / new-car页面使用Session
首次加载页面时
Session.set('parts', []});
Session.set('name', '');
当用户保存零件时
var addedPart = getPart();
var update = Session.get('parts').push(addedPart);
Session.set('parts', update);
然后,您的模板帮助程序函数可以通过调用Session.get()来获取渲染视图所需的一切。
Template.view.helpers({
currentParts: function() {
return Session.get('parts');
}
});
你怎么看?我自己对Meteor相当新,所以可能有更聪明的方法来对会话进行批量更新。但这是一般要点。