流星使用“空”对象

时间:2015-11-11 13:44:10

标签: javascript meteor meteor-blaze

使用要保存在集合中的“新对象”时,正确的方法是什么。说我有一个收集汽车。我有/汽车/新车 url然后是一个表单:

名称:__

部分:此处的部件清单

如果我想让这个形式“反应”,在某种意义上说,如果我在部件数组中添加一个新部件,它表示重新渲染是使整个“汽车”成为反应对象的最佳方法。或者应该只在dom中添加一个新行?

我不想自动将整个内容插入“Cars”集合,直到它有一个名称和一个部件列表。

大多数示例显示添加到集合中非常简单 - >重新渲染DOM非常简单。

编辑:编辑汽车时可能适用相同的概念。从集合中获取汽车,设置所以返回的对象是被动的(所以我可以添加/删除部件)完成后获取所有值并存储编辑的汽车信息。

2 个答案:

答案 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相当新,所以可能有更聪明的方法来对会话进行批量更新。但这是一般要点。