我怎样才能使表单控件在“write back”中具有响应性?的方式

How can I make form controls be reactive in a "write back" manner?

本文关键字:响应 方式 back write 表单 控件      更新时间:2023-09-26

假设我有两个文本输入字段,它们的值与集合的名称和描述是动态关联的:

{{#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

您正在寻找的是所谓的双向数据绑定。正如@emgee所指出的,它还没有在Meteor中得到原生支持。也就是说,您可以使用以某种方式添加它的包来扩展Meteor:

  • Handlebar-bind是专门为Handlebars模板添加双向数据绑定支持而设计的。参见liveUpdate:true说明书。不过要注意,该软件包将自己描述为"早期预览测试状态"。
  • Angular.js for Meteor将Angular框架添加到Meteor中。这是一个更激进的解决方案,它将或多或少地用支持双向数据绑定的Angular.js模板取代拉手条。虽然Angular本身已经很成熟了,但它在Meteor中的实现目前还处于类似的alpha阶段。