你实际上应该如何在动态加载的部分中包含JS?

时间:2017-07-31 18:32:29

标签: ruby-on-rails

我知道有几个问题,但我仍然认为有一些领域可以使用一些澄清,因为Turbolinks的做法(1 js文件来统治它们)当开始包含通过Ajax动态加载的内容时,显然会直接从窗口出来。

因此,关于通过<div class="form-horizontal"> <h4>Project</h4> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", style = "max-width:300px;" } }) @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @*@Html.LabelFor(model => model.Users, htmlAttributes: new { @class = "control-label col-md-2" })*@ @Html.Label("Developers", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.ListBox("Developers", null, htmlAttributes: new { @class = "form-control", style = "max-width:300px;" }) @Html.ValidationMessageFor(model => model.Users, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @*@Html.LabelFor(model => model.Users, htmlAttributes: new { @class = "control-label col-md-2" })*@ @Html.Label("Project Managers", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.ListBox("ProjectManagers", null, htmlAttributes: new { @class = "form-control", style = "max-width:300px;" }) @Html.ValidationMessageFor(model => model.Users, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Create" class="btn btn-default" /> </div> </div> </div> 内部的Ajax动态加载的内容,因此最初没有被DOM识别,并且无法将任何JS绑定到已加载的新元素;

我有一种狡猾的怀疑,将JavaScript事件动态绑定到元素的“Rails方式”是将任何JavaScript放入{{1}动态渲染部分的文件(?)但是它将所有的javascript分成很多不同的小文件在某种程度上感觉不直观。我目前包括我的大多数JS inline每个_partial.html.erb文件,这对于绑定和解除绑定事件(这也感觉非常麻烦,更不用说不直观)给我带来了巨大的麻烦。

此外,js.erb文件不在资产管道中,在生产中缩小了吗?或者你是否应该将每个js.erb文件放入资产管道中以使其缩小?

- 或者我错过了/误解了什么?

0 个答案:

没有答案