文本显示在每个表单域中

时间:2013-09-25 21:17:15

标签: ruby-on-rails ember.js

我正在制作一个带有Rails后端的Ember应用程序。在其中一个模板中,我列出了来自数据库的可用团队,并在每个团队旁边放置一个表单字段供用户输入一些文本信息。如果我在一个表单字段中输入信息,则文本将出现在所有表单字段中(有点像多光标体验)。这是一个问题。此外,当我提交按钮参加其中一个会议时,控制器中没有任何事情发生。我想知道这是否是一个相关的问题,因为Ember可能认为我试图一次从多个表单提交,因为这些表单的行为就好像它们是相同的形式。

你能看出我做错了吗?

<script type="text/x-handlebars" id="conferences">

  <div class='span4'>
      {{#each item in model}}
      <li> {{#link-to 'conference' item}}
      {{ item.name }} 
      {{ partial 'conferences/form'}}
      {{/link-to }}</li>
    {{/each}}

         </ul>
  </div>

  <div class="span4 offset4">
   {{ outlet}}
   </div>

</script>

插入表格

<script type="text/x-handlebars" id="conferences/_form">
<form class="form-horizontal" {{action "attend" on="submit"}}>
   <div class="controls">
      {{input value=username type="text"}}
  </div>   
  <button type="submit" class="btn">attend</button>
</form>
</script>

会议控制器

 App.ConferencesController = Ember.ObjectController.extend({
    actions: {
        attend: function() {    
         console.log('this is not logging, & no indication rails route is posted to)
        $.post("/join_conference_path", {

          username: this.get("username"),

        }).then(function() {
          document.location = "/";
        }, function() {

        }.bind(this));
       }
      }
  });

1 个答案:

答案 0 :(得分:0)

由于每个输入值都绑定到同一属性username,因此会将所有输入值同步到同一文本。

这是因为所有_form部分都在您的情况App.ConferencesController中的相同上下文中呈现。要使它们在单独的上下文中呈现,请使用itemController帮助器的each参数。请参阅此处的规范:http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_each

{{#each item in model itemController="conference"}}

在这种情况下,我建议您将App.ConferencesController重命名为App.ConferenceController,这将代表每个“项目”的各个上下文。以这种方式完成操作后,您的操作将始终仅使用用户名输入来获取特定的“项目”。

操作可能不会触发,因为默认情况下所有操作都以路径而不是控制器为目标尝试将target="controller"属性添加到action帮助程序:

{{action "attend" on="submit" target="controller"}}