Я создал новые поля, но когда я пытаюсь обновить свой ресурс, метод "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.