rails ujs 调用 class 的子集
rails ujs call on subset of class
Class Usercontent
通过使用 turbolinks 的 AJAX 调用生成和显示记录,本质上是 rails 方式,除了在 [=49] 中调用 jQuery3 =] 5 个应用程序。
然而有两种呈现情况,一种是针对 class (usercontent
) 的所有对象,另一种是针对子集 (point
),在同一页面上,但在选项卡,具有两种不同的形式和以下 usercontents.js
javascript.
$(document).on('turbolinks:load', function() {
$('[data-js-usercontent-form]').on("ajax:success", function(event, data, status, xhr){
var usercontent = $(xhr.responseText).hide();
$('#usercontents').append(usercontent);
usercontent.fadeIn(1000);
});
$('[data-js-usercontent-id]').on("ajax:success", function(event, data, status, xhr){
var usercontent_id = xhr.responseJSON.id;
$('[data-js-usercontent-id=' + usercontent_id + ']').hide();
});
$('[data-js-point-form]').on("ajax:success", function(event, data, status, xhr){
var point = $(xhr.responseText).hide();
$('#points').append(point);
point.fadeIn(1000);
});
$('[data-js-point-id]').on("ajax:success", function(event, data, status, xhr){
var point_id = xhr.responseJSON.id;
$('[data-js-point-id=' + point_id + ']').hide();
});
});
控制器声明两个集合
@usercontents = Usercontent.all
@points = Usercontent.where(['contenttype_id = ?', 1]).all
视图对集合有两个不同的调用
<div id=points class='tableize'>
<%= render @points %>
<div id=usercontents class='tableize'>
<%= render @usercontents %>
谁又通过 AJAX _point.html.erb
调用要更新的单个项目(两个部分都在 views/usercontents 目录中)
<div class='row' data-js-point-id=<%= point.id %>>
和_usercontent.html.erb
<div class='row' data-js-usercontent-id=<%= usercontent.id %>>
问题是前者使用错误的 data-js
调用呈现 'full' 集合:
<div id="points" class="tableize">
<div class="row" data-js-usercontent-id="33"></div>
<div class="row" data-js-usercontent-id="34"></div>
<div class="row" data-js-usercontent-id="35"></div>
<div class="row" data-js-usercontent-id="36"></div>
<div class="row" data-js-usercontent-id="37"></div>
<div class="row" data-js-usercontent-id="38"></div>
<div class="row" data-js-usercontent-id="39"></div>
<div class="row" data-js-usercontent-id="48"></div>
</div>
显然 render @points
没有正确呈现。如何解决?
您的问题是因为:
Rails determines the name of the partial to use by looking at the
model name in the collection.
(source)
这意味着您的部分 _point.html.erb
从未被使用过。
@points
集合在 _usercontent.html.erb
中呈现,因为它包含 Usercontent
条记录。
要解决您的问题,请通过指向正确的上下文来呈现部分内容:
<div id=points class='tableize'>
<%= render partial: "point", collection: @points %>
Class Usercontent
通过使用 turbolinks 的 AJAX 调用生成和显示记录,本质上是 rails 方式,除了在 [=49] 中调用 jQuery3 =] 5 个应用程序。
然而有两种呈现情况,一种是针对 class (usercontent
) 的所有对象,另一种是针对子集 (point
),在同一页面上,但在选项卡,具有两种不同的形式和以下 usercontents.js
javascript.
$(document).on('turbolinks:load', function() {
$('[data-js-usercontent-form]').on("ajax:success", function(event, data, status, xhr){
var usercontent = $(xhr.responseText).hide();
$('#usercontents').append(usercontent);
usercontent.fadeIn(1000);
});
$('[data-js-usercontent-id]').on("ajax:success", function(event, data, status, xhr){
var usercontent_id = xhr.responseJSON.id;
$('[data-js-usercontent-id=' + usercontent_id + ']').hide();
});
$('[data-js-point-form]').on("ajax:success", function(event, data, status, xhr){
var point = $(xhr.responseText).hide();
$('#points').append(point);
point.fadeIn(1000);
});
$('[data-js-point-id]').on("ajax:success", function(event, data, status, xhr){
var point_id = xhr.responseJSON.id;
$('[data-js-point-id=' + point_id + ']').hide();
});
});
控制器声明两个集合
@usercontents = Usercontent.all
@points = Usercontent.where(['contenttype_id = ?', 1]).all
视图对集合有两个不同的调用
<div id=points class='tableize'>
<%= render @points %>
<div id=usercontents class='tableize'>
<%= render @usercontents %>
谁又通过 AJAX _point.html.erb
调用要更新的单个项目(两个部分都在 views/usercontents 目录中)
<div class='row' data-js-point-id=<%= point.id %>>
和_usercontent.html.erb
<div class='row' data-js-usercontent-id=<%= usercontent.id %>>
问题是前者使用错误的 data-js
调用呈现 'full' 集合:
<div id="points" class="tableize">
<div class="row" data-js-usercontent-id="33"></div>
<div class="row" data-js-usercontent-id="34"></div>
<div class="row" data-js-usercontent-id="35"></div>
<div class="row" data-js-usercontent-id="36"></div>
<div class="row" data-js-usercontent-id="37"></div>
<div class="row" data-js-usercontent-id="38"></div>
<div class="row" data-js-usercontent-id="39"></div>
<div class="row" data-js-usercontent-id="48"></div>
</div>
显然 render @points
没有正确呈现。如何解决?
您的问题是因为:
Rails determines the name of the partial to use by looking at the model name in the collection.
(source)
这意味着您的部分 _point.html.erb
从未被使用过。
@points
集合在 _usercontent.html.erb
中呈现,因为它包含 Usercontent
条记录。
要解决您的问题,请通过指向正确的上下文来呈现部分内容:
<div id=points class='tableize'>
<%= render partial: "point", collection: @points %>