Silverstripe 每次单击按钮时,使用ajax从DataObject加载一定数量的项?
我有一个Silverstripe 每次单击按钮时,使用ajax从DataObject加载一定数量的项?,silverstripe,Silverstripe,我有一个查看更多按钮,单击该按钮时,我希望能够将另外3个过去的事件加载到页面加载上显示的默认3个过去的事件中,然后如果再次单击,则添加另外3个,以此类推 下面的代码可以工作,但由于某些原因正在乘以数字,例如,如果我按代码现在的“查看更多”按钮,它将返回18个过去事件,而它应该只返回6个过去事件 如果我dd($amountofcurrentPasteEvents+3)我得到int(6)返回3次,6 x 3=18。e、 g: 问题是为什么它会被呼叫三次?我做错了什么 DashboardPage.p
查看更多
按钮,单击该按钮时,我希望能够将另外3个过去的事件加载到页面加载上显示的默认3个过去的事件中,然后如果再次单击,则添加另外3个,以此类推
下面的代码可以工作,但由于某些原因正在乘以数字,例如,如果我按代码现在的“查看更多”按钮,它将返回18个过去事件
,而它应该只返回6个过去事件
如果我dd($amountofcurrentPasteEvents+3)
我得到int(6)
返回3次,6 x 3=18。e、 g:
问题是为什么它会被呼叫三次?我做错了什么
DashboardPage.php
class DashboardPage_Controller extends Page_Controller {
private static $allowed_actions = array(
'pastEvent',
'seeMorePastEvents',
'pasteventfilter',
'LimitedPastEvents'
);
public function LimitedPastEvents()
{
return PastEvent::get()->limit(3);
}
public function seeMorePastEvents() {
if (Director::is_ajax()) {
// Gets the amount of past events that are display on the page at present
$amountOfCurrentPastEvents = $_POST['events'];
// Adds 3 onto how ever many past events are currently showing
$PastEvents = PastEvent::get()->limit($amountOfCurrentPastEvents + 3);
return $this->customise(array(
'Results' => $PastEvents
))->renderWith('AjaxPastEvents');
}
}
...
}
仪表板页面.ss
<% loop LimitedPastEvents %>
<div class="past-event-results">
<div class="col-md-4 no-padding past-event">
<a href="$Link">
<div class="live-workouts-wrapper">
<div class="on-demand-image" style="background-image: url($ThemeDir/images/vid-3.jpg);">
<div class="play-icon"></div>
</div>
<div class="on-demand-info text-center">
<div class="on-demand-location">
<span class="pin-icon"></span><span>$BranchLocation.Name, $BranchLocation.City</span>
</div>
<div class="on-demand-date-time">
<span class="time-icon"></span>
<span>{$EventDate.Day} {$EventDate.ShortMonth} {$EventDate.Format(dS)} $Time.Nice</span>
</div>
<div>
<strong>$EventName</strong>
</div>
</div>
</div>
</a>
</div>
</div>
<% end_loop %>
<div class="col-md-12">
<div class="text-center">
<button class="btn btn-seemore">SEE MORE<b class="btn-icon btn-down"></b></button>
</div>
</div>
<script>
$(document).ready(function() {
var pastEventCount;
$('.btn-seemore').on('click', function(event) {
event.preventDefault();
// Gets the amount of past events that are currently displayed on the page
pastEventCount = $('.past-event').length;
console.log(pastEventCount);
$.post('/dashboard/seeMorePastEvents', {events: pastEventCount}, function(data) {
$('.past-event-results').html(data);
});
});
});
</script>
查看更多
jQuery-位于DashboardPage.ss上
<% loop LimitedPastEvents %>
<div class="past-event-results">
<div class="col-md-4 no-padding past-event">
<a href="$Link">
<div class="live-workouts-wrapper">
<div class="on-demand-image" style="background-image: url($ThemeDir/images/vid-3.jpg);">
<div class="play-icon"></div>
</div>
<div class="on-demand-info text-center">
<div class="on-demand-location">
<span class="pin-icon"></span><span>$BranchLocation.Name, $BranchLocation.City</span>
</div>
<div class="on-demand-date-time">
<span class="time-icon"></span>
<span>{$EventDate.Day} {$EventDate.ShortMonth} {$EventDate.Format(dS)} $Time.Nice</span>
</div>
<div>
<strong>$EventName</strong>
</div>
</div>
</div>
</a>
</div>
</div>
<% end_loop %>
<div class="col-md-12">
<div class="text-center">
<button class="btn btn-seemore">SEE MORE<b class="btn-icon btn-down"></b></button>
</div>
</div>
<script>
$(document).ready(function() {
var pastEventCount;
$('.btn-seemore').on('click', function(event) {
event.preventDefault();
// Gets the amount of past events that are currently displayed on the page
pastEventCount = $('.past-event').length;
console.log(pastEventCount);
$.post('/dashboard/seeMorePastEvents', {events: pastEventCount}, function(data) {
$('.past-event-results').html(data);
});
});
});
</script>
$(文档).ready(函数(){
var pastEventCount;
$('.btn seemore')。在('click',函数(事件){
event.preventDefault();
//获取页面上当前显示的过去事件的数量
PasteEventCount=$('.past event')。长度;
console.log(粘贴ventcount);
$.post('/dashboard/seeMorePastEvents',{events:pastEventCount},函数(数据){
$('.pass event results').html(数据);
});
});
});
问题是代码使用$('.pass event results').html(数据)将新内容添加到.pass event results
代码>,但模板有3个。过去的事件结果开始时为div
ajax函数返回的数据(6个PasteEvent条目)被添加到3个div中,结果显示了18个条目
以下循环首先创建3个过去事件结果:
<% loop LimitedPastEvents %>
<div class="past-event-results">
...
</div>
<% end_loop %>
DataList
limit()
函数可以执行以下操作:
我们使用偏移量来更改提取起点
然后,我们将JavaScript更改为附加检索到的数据,而不是覆盖现有事件:
$('.past-event-results').append(data);
乍一看,这似乎是一个JS问题
您可能会发送x3 AJAX请求—如果您中断浏览器的调试器,将有多少XHR请求发送到SilverStripe
还要检查生成的标记。我怀疑您的JS逻辑应该附加到。过去的事件结果
DOM节点本身,而不是附加到它的内容上,这本质上就是jQueryhtml
方法为您所做的事情。现在非常有意义!非常感谢,它现在工作得很好:)
$('.past-event-results').append(data);