【问题标题】:Rendering blade template base on Javascript Condition基于Javascript条件渲染刀片模板
【发布时间】:2017-01-02 08:37:43
【问题描述】:

我有

一个帐户 > 带有表格和其他模式的索引页面,我将其分割成一个小的刀片视图。在那个页面上,我有 100000 个帐户。

问题

在我的编辑模式顶部有一段 PHP 发出 100000 个 curls 请求,并导致我的帐户 > 索引页面出现巨大延迟。

我的目标

是为了防止在前面渲染这些刀片,并且仅在用户单击铅笔图标时才渲染。


这是我的 account.index 刀片

@extends('layouts.internal.master')
    @section('content')

    

    <div class="panel account-panel" style="padding: 30px;">
      <div class="panel-body">
    
       
        <div class="col-sm-2">
          <a id="account-create" class="btn btn-success btn-block mb20" data-toggle="modal" data-target=".account-create">Create</a>
        </div>
    
        <div class="table-responsive" style="margin-bottom: 0;">
          <table class="table" id="account-table">
            <thead>
              <tr>
                <th>#</th>
                <th>Account ID</th>
                <th>Customer Type</th>
                <th>Name</th>
                <th>Email</th>
                <th class="text-center">Auto Provisioning</th>
                <th class="text-center">AP</th>
                <th style="min-width: 90px;">Action</th>
              </tr>
            </thead>
            <tbody>
    
              <?php
              $x = 0;
    
              ?>
              @foreach( $accounts as $account )
    
              @if($account->email_address !== 'admin@benunets.com')
          
              <tr>
                <td>{{$x += 1 }}</td>
                <td><a href="/account/{!! $account->account_id !!}">{!! $account->account_id !!}</a></td>
                <td>
    
                {{-- <img src="{{ $image }}" width="30px"> --}}
    
                <span class="badge" style="background-color: {{ $color2 }}">{!! $customer_type !!}</span></td>
                <td>{!! ucfirst($account->first_name) !!} {!! ucfirst($account->last_name) !!}</td>
                <td>{!! $account->email_address !!}</td>
                <td class="text-center" >
    
                  @if($user != null AND $user->auto_provisioning == 1)
                  {!! Helper::intBoolToIcon($user->auto_provisioning) !!}
                  @else
                  <i title="false" style="font-size: 18px; color: #F44336" class="fa fa-times"></i>
                  @endif
    
                </td>
                <td class="text-center" ><b>{!! $count_cpe !!}</b></td>
                <td class="text-center">
    
                  <!-- Buttons -->
                  <div class="tool-buttons">
                    <ul class="button-list">
    
                      <!-- Edit -->
                      <li><a data-toggle="modal" data-target=".account-edit-{!! $account->account_id !!}" class="tooltips account-edit" data-id="{!! $account->account_id !!}" data-toggle="tooltip" data-placement="top" title="" data-original-title="Edit"><i class="fa fa-pencil"></i></a></li>
    
                      <!-- Delete -->
                      <li><a data-toggle="modal" data-target=".account-destroy-{!! $account->account_id !!}" class="tooltips" data-toggle="tooltip" data-placement="top" title="" data-original-title="Delete"><i class="fa fa-trash-o"></i></a></li>
                    </ul>
                  </div>
    
                </td>
              </tr>
    
              @endif
              @endforeach
    
            </tbody>
          </table>
        </div>
      </div>
    </div>
    
    @include('account.modal.account.destroy')
    @include('account.modal.account.create')
    @include('account.modal.account.edit')


@section('pagescripts')

<script type="text/javascript">


  /*=============================================================================================
  =            Edit            =
  ============================*/


  //Edit Mode
  $('.account-edit').click( function() {


    var id = $(this).data("id");
    console.log(id);

    //Style
    var val2 = $("#auto_provisioning_switch-"+id).val();

    //Set the AP switch
    if(val2 == 1){
      $("#auto_provisioning_switch-"+id).bootstrapSwitch('state', true);
      $("[name='auto_provisioning_switch']").val(1);
      $('#service_plan_div-'+id).show();

      // Set the service plan dd menu
      var ajax = $.ajax({url: '/api/account/'+id+'/service_plan'});
      ajax.done(function (service_plan) {
        console.log(service_plan+' | id : ' + id );
        $('#service_plan-'+id).val(service_plan);
        });

    }else{
      $("#auto_provisioning_switch-"+id).bootstrapSwitch('state', false);
      $("[name='auto_provisioning_switch']").val(0);
      $('#service_plan_div-'+id).hide();
    }

    
  });

  




</script>

@stop

我只想渲染

@include('account.modal.account.edit')

当我点击铅笔进行编辑时。

@include('account.modal.account.destroy')

当我点击回收站进行删除时。


我该怎么做?


任何关于如何防止这种情况的提示都会有很大的帮助!!!

【问题讨论】:

  • JS?你的意思是javascript?我在您的代码中没有看到任何 javascript。任何 - 如果我理解正确 - 那么它是不可能的。 @include 指令在服务器渲染期间发生,而 javascript 在渲染页面到达客户端后发生在浏览器中。
  • 我试图显示更少的代码,但我会添加它。

标签: javascript php laravel laravel-5 blade


【解决方案1】:

您不能使用 javascript 代码更改刀片渲染,因为刀片渲染发生在您的服务器上,而 javascript 发生在您的浏览器上。

您可以做的是添加 javascript,以便在用户与您的页面交互时隐藏这些部分。

Show or hide an element using javascript in all browsers

【讨论】:

  • 在这种情况下,我的编辑模式顶部有 PHP,我该如何避免执行它?我有 10000 个帐户,它发出 10000 个卷发请求会导致巨大的延迟:( ...任何有关如何防止这种情况的提示都将是一个巨大的帮助!!!
  • 您的问题令人困惑。也许您的解决方案是....更多刀片/页面?这是您想要的流程:用户导航到主页,点击铅笔,然后浏览器导航到不同的“编辑”页面?在“编辑页面”中,您将只有 @include('account.modal.account.edit') 指令。
  • 我希望我有那个选项,那么我就不会问这个问题了。我不能做重定向,我现在正在处理一个模态。
  • 所以你的流程是:用户请求一次,使服务器工作非常努力,在第一个响应时获取所有数据。您的客户端所做的任何事情都不能让时间倒流并阻止您的服务器执行它已经完成的操作。要么我不理解您的问题,要么您对浏览器-服务器通信的理解存在巨大漏洞。
  • 我知道我不应该这样做 - 提前给我的服务器增加了很多负担。但我现在正在努力改进它。当用户单击铅笔图标时,我应该将其转换为 ajax GET 以获取基于帐户 ID 的特定帐户信息。我在想——也许还有另一种方法,但我不客串。
猜你喜欢
  • 2016-03-17
  • 2016-04-04
  • 2018-10-03
  • 2016-02-27
  • 2016-07-13
  • 2018-08-15
  • 2019-02-04
  • 1970-01-01
  • 2012-12-06
相关资源
最近更新 更多