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