1

在 laravel 7 /livewire 1.3 / turbolinks:5.2 / alpine@v2 应用程序中,我将 crud 编辑器作为定义了 $form 的组件

class AppNews extends Component
{
    use WithPagination;
    use WithFileUploads;

    public $form = [
        'title'           => '1',
        'slug'            => '',
        'content'         => '2',
        'content_shortly' => '3',

和定义了 inpoyt 的编辑器:

<form class="form-editor" @if($updateMode=='edit')  wire:submit.prevent="update" @else  wire:submit.prevent="store" @endif >
            <div class="card">
                <div class="card-body card-block">                                    
                    
                    <dl class="block_2columns_md m-3"> <!-- title FIELD DEFINITION -->
                        <dt class="key_values_rows_label_13">
                            <label class="col-form-label" for="title">Title:</label>
                        </dt>
                        <dd class="key_values_rows_value_13">
                            <input
                                wire:model.lazy="form.title"
                                id="title"
                                class="form-control editable_field"
                                placeholder="Enter descriptive title"
                                autocomplete=off
                            >
                            @error('form.title')
                            <div class="validation_error">{{ clearValidationError($message,['form.'=>'']) }}</div> @enderror
                        </dd>
                    </dl> <!-- <dt class="block_2columns_md m-0"> title FIELD DEFINITION -->

                    

它对我有用,除了在控制台中我看到很多附加请求,比如

http://127.0.0.1:8084/livewire/message/admin.app-news

当我修改表单的某些字段时,我尝试使用 alpineJS 摆脱它,并且在文档中我看到了调度方法并尝试定义它:

<dl class="block_2columns_md m-3"> 
    <dt class="key_values_rows_label_13">
        <label class="col-form-label" for="title">Title:</label>
    </dt>
    <dd class="key_values_rows_value_13" wire:model="form.title" x-data="{ title: ''}">
        <input
            x-model="search"
            id="title"
            class="form-control editable_field"
            placeholder="Enter descriptive title"
            autocomplete=off
        >
        @error('form.title')
        <div class="validation_error">{{ clearValidationError($message,['form.'=>'']) }}</div> @enderror
    </dd>
</dl> 

但是,当字段被编辑(焦点更改)以将值从定义的(在 x 数据块中)标题 var 设置为 form.title 时,我该如何处理?

修改块:

  1. 我尝试:

     $form['title']::{{ print_r($form['title'],true) }}
    
    <dd class="key_values_rows_value_13" wire:model="form.title.lazy" x-data="{ title: ''}" >
    <input
         x-model="title"
         x-on:blur="$dispatch('title', title)"
         id="title"
         class="form-control editable_field"
         placeholder="Enter descriptive title"
         autocomplete=off
     >
    

它可以工作,但在任何按键下我都看到了请求。看起来懒惰模式在这里不起作用。如何设置?

  1. 当使用现有数据打开表单时,我需要在 x-init 中设置默认数据:

    $form['title']::{{ print_r($form['title'],true) }}
    <dd class="key_values_rows_value_13" wire:model="form.title.lazy" x-data="{ title: ''}" x-init="title = '{{$form['title']}}'" >
    <input
        x-model="title"
        x-on:blur="$dispatch('title', title)"
        id="title"
        class="form-control editable_field"
        placeholder="Enter descriptive title"
        autocomplete=off
     >
    

由于结果输入在打开的表单上具有有效数据,因此尝试编辑输入时出现错误:

htmlspecialchars() expects parameter 1 to be string, array given (View: .../form.blade.php) 

哪种方式有效?

修改块#2 谢谢,但我有一些不清楚的地方。我把它做成:

<dd class="key_values_rows_value_13" wire:model.lazy="form.title" x-data="{ title: '{{$form['title']}}'}">

    <input
        x-model="title"
        x-on:blur="$dispatch('input', title)"
        id="title"
        class="form-control editable_field"
        placeholder="Enter descriptive title"
        autocomplete=off
    >
    @error('form.title')
    <div class="validation_error">{{ clearValidationError($message,['form.'=>'']) }}</div> @enderror
</dd>
  1. 它有效,但在控制台中我仍然看到请求,比如

    http://127.0.0.1:8084/livewire/message/admin.app-news

当输入失去焦点时。我无法摆脱这个请求?分配来自 alpine var 的 $form 数据时是否触发?

  1. 排队

    x-on:blur="$dispatch('input', title)"

高山中的“输入”预定义事件是什么?它是否参考电流输入控制?

  1. 为什么在包装 dd 元素时定义了 wire:model.lazy?我想它必须分配给输入控制?

谢谢!

4

1 回答 1

2

根据 Livewire 文档,在 Alpine.js 中,您可以使用示例中的相关代码在模糊时触发input事件:inputx-on:blur="$dispatch('input', title)"

<dd class="key_values_rows_value_13" wire:model="form.title" x-data="{ title: ''}">
  <input
    x-model="search"
    x-on:blur="$dispatch('input', title)"
    id="title"
    class="form-control editable_field"
    placeholder="Enter descriptive title"
    autocomplete=off
  >
于 2020-08-05T18:16:33.000 回答