# Field types
# CharField
A CharField
uses a valueFormatter
to format any value (except undefined
and null
) to a string
for display purpose.
As input element a textbox will be rendered (equal to default RenderableField
input).
# BooleanField
A BooleanField
uses a valueFormatter
to format any value to either 'Yes' or 'No'.
You can customize the translations in the configuration.
As input element a checkbox will be rendered.
In case you want to use other terms for example 'Active' and 'Inactive' you can overwrite the valueFormatter
.
import {BooleanField} from 'vue-service-model'
class ActiveStatusField extends BooleanField {
async valueFormatter () {
return await this.value ? 'Active' : 'Inactive'
}
}
# IntegerField
A IntegerField
uses a valueFormatter
to format any value (except undefined
and null
) to a string
for display purpose.
As input element a textbox with type="number"
will be rendered and the input value will be parsed to an integer.
# DecimalField
A DecimalField
uses a valueFormatter
to format any value (except undefined
and null
) to a string
for display purpose.
As input element a textbox with type="number"
will be rendered and the input value will be parsed to an float with precision.
Depending on options.decimalPlaces
the step
attribute on the Input element will be set.
# Options
new DecimalField({
options: {
// Set decimal places for DecimalField.
// Which will result in step="0.01"
decimalPlaces: 2
}
})
# ForeignKeyField
A ForeignKeyField
can be used to handle a relation to another ServiceModel.
The value is the primary key of your related model.
import {ServiceModel, Field, CharField, ForeignKeyField} from 'vue-service-model'
class User extends ServiceModel {
static urls = 'https://jsonplaceholder.typicode.com/users/'
static fieldsDef = {
id: new Field({primaryKey: true}),
name: new CharField()
}
}
class Album extends ServiceModel {
static urls = 'https://jsonplaceholder.typicode.com/albums/'
static fieldsDef = {
user: new ForeignKeyField({
options: {
model: User, // Related model
fieldName: 'name' // Related field which should be used for display and input
}
})
}
}
You need to define the related model in options.model
which has to inherit from ServiceModel.
The options.fieldName
is used for representation. When you use DisplayField
with a
ForeignKeyField
(user
field in Album
) then will internally render the DisplayField
with the field name
of your User
model.
const album = new Album({
user: 1 // Primary key of user
})
const user = await album.val.user // Request: GET ../users/1/
// user is now an instance of the ServiceModel User
await user.val.name // Output: Leanne Graham
// Change the assigned user by passing the primary key
album.val.user = 3
WARNING
When using the default provided inputRender
method. Be sure to use a Field which can be represent to a string
with a valueFormatter
(e.g. CharField
).
# Options
new ForeignKeyField({
options: {
// Related model
model: User,
// Related field which should be used for display and input
fieldName: 'name'
}
})
← Fields ServiceModel →