0

我正在制作一个带有 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));
       }
      }
  });
4

1 回答 1

0

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

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

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

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

操作可能不会触发,因为默认情况下所有操作都针对路由而不是控制器。尝试向助手添加target="controller"属性:action

{{action "attend" on="submit" target="controller"}}
于 2013-09-25T22:53:03.547 回答