设置单选按钮的值

时间:2014-02-21 05:37:49

标签: forms meteor

所以我试图在编辑表单上设置单选按钮的值。我尝试使用jQuery运行if语句,然后使用选择器设置checked属性。但我想我不明白jQuery和Template.template.helpers是如何协同工作的,因为我永远无法让jQuery做任何事情。

无论如何,我有以下工作,但我只是好奇,如果这是最好的方式。对于像在表单中设置单选按钮的值这样简单的事情,这似乎很臃肿。我想可能有更适合表单的包。

这是Javascript

Template.clientEdit.helpers({

    // set the radio buttons
    isActive: function() {
        if (this.status == "active") {
            return "checked";
        }
    },

    isArchived: function() {
        if (this.status == "archived") {
            return "checked";
        }
    },
});

和HTML

<input type="radio" name="status" id="status-radio-1" value="active" {{isActive}} >
<input type="radio" name="status" id="status-radio-2" value="archived" {{isArchived}} >

由于

2 个答案:

答案 0 :(得分:4)

你可以编写一个全球手把助手,用于所有Meteor表格,例如:

Handlebars.registerHelper('checked_eq', function(x, y){
  if (x === y){
     return ' checked="checked"';
  }
  return ''
})

并在您的模板中使用它,如:

<input type="radio" name="status" id="status-radio-1" value="active" {{checked_eq status 'active'}} >
<input type="radio" name="status" id="status-radio-2" value="archived" {{checked_eq status 'archived'}} >

你也可以写一些更通用的东西,例如:

Handlebars.registerHelper 'checked', (x)-> if x then ' checked="checked"' else ''
Handlebars.registerHelper 'notChecked', (x)-> if x then '' else ' checked="checked"'
# repeat for disabled / selected etc

在渲染模板之前,还应用数据/ dataContext转换:

 // ...  using iron-router for data contet
 data: function(){
   var client = Clients.findOne(this.params.clientId);
   client.checkedActive = (client.status == 'active');
   client.checkedArchived = (client.status == 'archived');
   return client;
 }
 // ...

 // ... or apply a transform when making a list
 Template.clientList.helpers({
    clients: function(){
      return Clients.find({},{
        transform: function(client){
           client.checkedActive = (client.status == 'active');
           client.checkedArchived = (client.status == 'archived');
           return client;
        }
      });
    }
 });

然后在您的模板中使用,如:

<input type="radio" name="status" id="status-radio-1" value="active" {{checked checkedActive}} >
<input type="radio" name="status" id="status-radio-2" value="archived" {{checked checkedArchived}} >

答案 1 :(得分:0)

我正在研究这个并且无法使其工作 - 非常接近但是它阻止了模板的加载,所以基于this我使用了下面的工具就像一个魅力:

Template.registerHelper('checkedRadio', function(x, y){
    return (x === y) ? { checked: 'checked' } : null;
});