【问题标题】:Using blade components and javascript使用刀片组件和 javascript
【发布时间】:2019-08-20 13:46:14
【问题描述】:

我正在使用 Laravel,我正在尝试使用 javascript 来填充用户列表。 问题是列表的每个条目都基于我在 Blade 组件中创建的视图:

pro_list_entry.blade.php

@if( isset($pro_id) && isset($pro_avatar) && isset($pro_name))
    <a onclick='selectProfessional( {{ $pro_id }} , {{ $pro_avatar }}, {{ $pro_name }} )' style='cursor: pointer'>
        <div class='row'>
            <div class='col-4'>
                <img class='u-avatar rounded-circle' src='{{ $pro_avatar }}'>
            </div>
            <div class='col-8 d-flex align-items-center'>
                <h6 class='fm-wrapped-text'>{{ $pro_name }}</h6>
            </div>
        </div>
    </a>
 @endisset

然后我想使用 Javascript 将所有这些组件提供给列表:

var listOfPhysicians = buildProfessionalListFromData(jsonData.professionals);

$('#pc_new_app_med_list').empty();
$('#pc_new_app_med_list').html(listOfPhysicians);

...

function buildProfessionalListFromData(data) {
    var list = "";

    if (data != null) {
        for (i = 0; i < data.length; i++) {

            var entry =
            "@component('patrons.clinic.shared.pro_list_entry')"
                + "@slot('pro_id')" + data[i].professional_id + "@endslot"
                + "@slot('pro_avatar') ../../user_uploads/avatars/" + data[i].avatar + "@endslot"
                + "@slot('pro_name')" + data[i].prefix + " " + data[i].first_name + " " + data[i].last_name + "@endslot"
            + "@endcomponent";

            list = list + entry;
        }
    }
    return list;
}

经过一番研究,我发现我想做的事情根本不可能。

还有其他方法可以做到这一点吗?添加基于视图的列表条目,并用 javascript 填充它们的数据?也许我只是没有看到明显的解决方案。

有什么帮助吗?

谢谢。

【问题讨论】:

  • 您无法使用刀片组件执行此操作。刀片组件在服务器上呈现为 HTML,您正在尝试使用客户端 dom 操作将服务器端呈现的代码附加到您的页面,这将永远无法工作。
  • @Joe 是的。我知道 :( 正如我所说,“我发现我正在尝试做的事情根本不可能”。不过,我仍然需要解决这个问题。还有其他选择吗?
  • 为此,我建议使用 vue.js 之类的东西(或 angular 或 react)。你从哪里得到jsonData.professionals?是用户上传的吗?
  • 没有。我正在通过对服务器的 Ajax 调用(在 PHP 中)来恢复它,而服务器又会从数据库中检索和调整数据。

标签: javascript php html laravel laravel-blade


【解决方案1】:

您可以像往常一样编写刀片并使用render() 函数对其进行渲染。

在你的控制器方法中

 function foo()
 {
    $yourView= SELF::returnYourView();
    return json_encode(['yourView' => $yourView]);
 }

functionv returnYourView()
{
    return view('yourview')->render();
}

在你的 jquery 中

$('your-parent-dev').html(response.yourview);

【讨论】:

  • 这是个好主意,但不适用于这种情况。你看,我希望控制器只返回数据,而不是视图,因为这个请求也用于其他目的。不过谢谢你的建议。
  • 我最终使用了这个概念。到目前为止,这是解决此问题的最佳方法。谢谢。
猜你喜欢
  • 2021-02-04
  • 2016-03-18
  • 2018-03-29
  • 1970-01-01
  • 2017-08-30
  • 2022-01-12
  • 1970-01-01
  • 2017-10-08
  • 2017-09-22
相关资源
最近更新 更多