Пользовательское поле Vue не называется методом заполнения в Laravel Nova - PullRequest
0 голосов
/ 07 ноября 2018

Я создал новые поля, но когда я пытаюсь обновить свой ресурс, метод "fill" не работает. Этот метод даже не вызывается. Мой компонент выглядит так

<template>
    <default-field :field="field" :errors="errors">
        <template slot="field">
            <belongs-to
                v-for="(resource, key) in selectedResources"
                :key="key"
                :bidResouce="resource"
                :resourceName="field.resourceName"
                :associable="field.associableRelationship"
                :field="field"
                v-model="selectedResources[key]"
                @click="selectBid"
            >

            </belongs-to>
        </template>
    </default-field>
</template>

<script>
    import { FormField, HandlesValidationErrors } from 'laravel-nova'
    import BelongsTo from "./BelongsTo";

    export default {
        components: {BelongsTo},
        mixins: [FormField, HandlesValidationErrors],

        props: [
            'options',
            'resourceName',
            'resourceId',
            'field'
        ],

        data: () => ({
            availableResources: [],
            search: '',
            selectedResources: [],
            resourcesCount : 5
        }),se{
                    this.selectedResources = this.field.options;
                }
            },

            /**
             * Fill the given FormData object with the field's internal value.
             */
            fill(formData) {
                console.log('test')
                console.log(formData)
                formData.append(this.field.attribute, this.selectedResources || '')
            },

            /**
             * Update the field's internal value.
             */
            handleChange(value) {
                this.value = value
            },

            selectBid(resourceValue){

            }

        },

        computed: {

            defaultValues(){
                let data = {};
                for(let i =0; i< this.resourcesCount; i++ ){
                    data[i] = null;
                }
                return data;
            },

            countSelected(){
                let countNotEmptyItems = 0;
                for (let key in this.selectedResources){
                    if(!!this.selectedResources[key]){
                        countNotEmptyItems += 1;
                    }
                }
                return countNotEmptyItems;
            }
        },
        watch: {
            countSelected(newCount){
                if(newCount >= this.resourcesCount){
                    this.resourcesCount++;
                    this.selectedResources = Object.assign(this.defaultValues, this.selectedResources);
                }
            }
        }
    }
</script>

        methods: {
            /*
             * Set the initial, internal value for the field.
             */
            setInitialValue() {
                let optionsSize = _.size(this.field.options);

                if(optionsSize < this.resourcesCount){
                    this.selectedResources = Object.assign(this.defaultValues, this.field.options);
                }else{
                    this.selectedResources = this.field.options;
                }
            },

            /**
             * Fill the given FormData object with the field's internal value.
             */
            fill(formData) {
                console.log('test')
                console.log(formData)
                formData.append(this.field.attribute, this.selectedResources || '')
            },

            /**
             * Update the field's internal value.
             */
            handleChange(value) {
                this.value = value
            },

        },

        computed: {

            defaultValues(){
                let data = {};
                for(let i =0; i< this.resourcesCount; i++ ){
                    data[i] = null;
                }
                return data;
            },

            countSelected(){
                let countNotEmptyItems = 0;
                for (let key in this.selectedResources){
                    if(!!this.selectedResources[key]){
                        countNotEmptyItems += 1;
                    }
                }
                return countNotEmptyItems;
            }
        },
        watch: {
            countSelected(newCount){
                if(newCount >= this.resourcesCount){
                    this.resourcesCount++;
                    this.selectedResources = Object.assign(this.defaultValues, this.selectedResources);
                }
            }
        }
    }
</script>

Помните, что компонент это тоже мой пользовательский компонент. В документации указано, что

Перед созданием или обновлением ресурса Nova просит каждое поле формы «заполнить» исходящий объект FormData парами ключ / значение. Каждое поле может добавлять столько элементов в FormData, сколько необходимо. Это может быть сделано в методе заполнения вашего файла FormField.vue.

...