1

假设我有两个文本输入字段,其值与集合的名称和描述相关联:

{{#with set}}
<input type="text" id="set_name" value="{{name}}" placeholder="Untitled Set"/>
<input type="text" id="set_desc" value="{{description}}" placeholder="Add Description"/>
{{/with}}

目前,当用户更改输入字段时,我必须添加代码以手动更新 Set 的属性,例如(在 CoffeeScript 中)

update = (set, field, newVal)->
  newVal = $.trim(newVal)
  if newVal && set[field] != newVal
    keyVal = {}
    keyVal[field] = newVal
    Sets.update(_id:set._id, {$set:keyVal})

Template.cardSubmit.events
  'change #set_name': (evt)->
    update(this, 'name', evt.target.value)
  'change #set_desc': (evt)->
    update(this, 'description', evt.target.value)

一段时间后,这变得非常重复。有没有办法在 Meteor 中以声明方式做到这一点?如果没有,任何建议如何扩展 Meteor 以允许这种双向反应?

Knockout.js 有一种巧妙的方法(当然只是在客户端): http: //knockoutjs.com/documentation/value-binding.html

4

1 回答 1

0

您正在寻找的是所谓的双向数据绑定。正如@emgee 所指出的,Meteor 本身并不支持它(目前)。也就是说,您可以使用以一种或另一种方式添加 Meteor 的包来扩展 Meteor:

  • Handlebar-bind专门设计用于向 Handlebars 模板添加双向数据绑定支持。请参阅有关 的说明liveUpdate:true。请注意,尽管该软件包将自己描述为“早期偷窥测试状态”。
  • Meteor 的 Angular.js将 Angular 框架添加到 Meteor。这是一个更激进的解决方案,它将或多或少地用支持双向数据绑定的 Angular.js 模板替换 Handlebars。尽管 Angular 本身已经成熟,但它在 Meteor 中的实现目前同样处于 alpha 阶段。
于 2013-06-11T03:48:41.720 回答