【问题标题】:Write a js expression inside laravel blade template在 laravel 刀片模板中写一个 js 表达式
【发布时间】:2017-07-03 15:46:58
【问题描述】:

我正在使用 tagsinput 进行一些标记操作。我想为从控制器发送的标签字段添加一些默认值。但似乎我尝试使用 js 表达式的方式不起作用。谁能帮我。这是代码。

<script>
    var cities = new Bloodhound({
                    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('text'),
                    queryTokenizer: Bloodhound.tokenizers.whitespace,
                    local: members
                });
                cities.initialize();
    var elt = $('#researcher');
                elt.tagsinput({
                    itemValue: 'value',
                    itemText: 'text',
                    allowDuplicates: false,
                    typeaheadjs: {
                        name: 'cities',
                        displayKey: 'text',
                        source: cities.ttAdapter()
                    }
                });
    @foreach ($memberResearch->member as $member)
         {!! $text = $member->firstName." ".$member->lastName !!}
         {!! $id = $member->member_id !!}
         @if($member->pivot->role == "Researcher")
             elt.tagsinput('add' , {"value" : {{ $id }} , "text" :{{ $text }} });
         @endif
    @endforeach 
</script>

【问题讨论】:

  • PHP 在 JS 之前执行
  • 那该怎么办呢?

标签: javascript php jquery laravel bootstrap-tags-input


【解决方案1】:

PHP 和 Javascript 是两个非常独立的实体。

对于这种东西,最好的方法是让 laravel 将内容(数据)转储到前端(javascript)可以获取的页面中。

例如:

    // controller
    $appConfig = [ 'foo' => 'bar' ];

    // blade
    <script>
        var AppConfig = {!! ! empty($appConfig) ? json_encode($appConfig) : "{}" !!};
    </script>

    // js
    var foo = JSON.parse(AppConfig).foo;
    console.log(foo); // outputs bar

【讨论】:

  • 是的,你应该
  • 我的意思是我应该将php数据分配给一个js变量然后使用它吗?
  • 是的。或者,您可以设置一个 API 供您的前端使用,这就是您在大型应用程序中所做的。但是对于简单的数据传递,将数据转储到刀片中,然后在 js 中将其取回是要走的路。你也可以使用类似的东西:github.com/JeffreyWay/PHP-Vars-To-Js-Transformer
  • 感谢您的建议。我曾尝试过使用 JavaScript 服务提供者的方法。但它向我显示了一个错误“找不到 JavaScript”。您能告诉我有关此错误的任何信息吗?
  • 如果你选择使用那个库,但你不能让它工作 - 那将需要一个新问题。我上面的例子应该足以让你在没有 JeffreyWay 库的情况下做到这一点 - 事实上,在后台,它'基本上做同样的事情
猜你喜欢
  • 2013-04-29
  • 1970-01-01
  • 2020-09-22
  • 2023-04-05
  • 2017-04-03
  • 2018-05-31
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多