在#each块中编辑一行

时间:2013-04-19 11:01:20

标签: javascript meteor handlebars.js

我有模板:

{{#each action_log}}
  <div>
     {{Name}}

     {{#if editing_score}}
        <input type="text" id="set_score" parm="{{_id}}" value="" />
     {{else}}
        <div class="score" id="{{_id}}">{{Score}} .</div>   
     {{/if}}

   </div>
{{/each}}

我有一个javascript代码:

Session.set('editing_score', false);

Template.today_list.editing_score = function() {
    return Session.equals('editing_score', true);
  };

Template.today_list.events({
 'click .score': function(e, t) {
      Session.set('editing_score', true);      
      Session.set('editing_score_id', e.target.id);
      Meteor.flush();
    }
});

因此,用户可以看到操作列表,想要点击其中一个并编辑一些值。但现在,如果用户单击该操作,代码将显示所有操作的文本框。

如何仅针对一个操作显示文本框?

我在会话中有操作ID:

Session.set('editing_score_id', e.target.id);

但我做不到这样的事情:

{{#if editing_score && editing_score_id == _id}}

{{#if editing_score(_id)}}

最好的方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

使用您的模板:

{{#if editing_score id}}

与你的助手:

Template.today_list.editing_score = function(id) {
  return Session.equals('editing_score_id', id);
};

但是,我会重构一下,这样你只有一个Session变量 - 不需要两个。

此外,您的“点击.score”会传递上下文,因此您可以从this进行身份识别 - 我发现这比您传入的事件更可靠。