What's New in V4
Changes in Naming
The naming used in the Data Model XML, Views XML and some JavaScript functions are changed to be more consistent and intuitive.
For the complete list, see the Naming Details section.
The data model and view XML changes are handled automatically by the migration process. However, the JavaScript changes have to be performed manually.
No More Explicit Links
It is now longer required to define link
elements explicitly. Instead, call the links by path with link.link_path(). The same function can now also be called directly from the on-press
attribute in the view XML, optionally passing view variables as arguments. This replaces the need for the link
attribute on buttons.
It is no longer required to use return link.some_view()
- instead just use link.some_view()
. The link function now throws an exception, that is used for navigation.
For details, see the Linking Views section.
New ‘resume’ Callback
Instead of defining ondismiss
actions on links, you can now define a single resume
function per view. If defined, this is called whenever the user returns to the view, both via a dismiss call and via the back button.
For details, see the Linking Views section.
New Choice Types
enum
has been renamed to single-choice-integer
, and enum_set
has been renamed to multiple-choice-integer
. Additionally, these types now take explicit keys for each option.
There are also three new choice types:
single-choice
Like single-choice-integer
, but takes string keys. This is recommended over single-choice-integer
.
boolean
Like single-choice-integer
, but has exactly two boolean options.
multiple-choice
Like multiple-choice-integer
, but takes string keys. This is recommended over multiple-choice-integer
.
‘Day’ Objects
date
fields now use a Day
object instead of Date
object to represent the value. The Day
object represents only the Gregorian day, with no time or timezone.
New Label Behavior
If no label is specified on an input component, it is now inferred from the Data Model. Will be blank for direct view variables, since they do not have any label. This that you can have more concise view components, for example:
To explicitly create an input without any label, use label=""
. This will remove it completely (no whitespace). To still have some whitespace, use label=" "
(a single space in the label).
The placeholder text of text inputs may now be customized by specifying placeholder="My placeholder"
. This may be used to create more compact forms, for example:
New V4 JourneyApps API
The JourneyApps API has been upgraded significantly, and is now available in V4.
Please see the documentation for the Backend API or refer to the section about Updating to the V4 API.
Naming Details
Data Model
<schema>
<data-model>
<object name="..." label="..." >
<model name="..." label="..." >
<attribute type="..." name="..." label="..." >
<field type="..." name="..." label="..." >
<display format="..." >
<display>...</display>
These changes are automatically applied by the migration process.
For details, see the syntax section under What is the data model?
Field Types
type="string"
type="text"
type="string" spec="text.address"
type="text:address"
Text Subtypes
type="int"
type="integer"
type="decimal"
type="number"
type="date"
type="date"
type="datetime"
type="datetime"
type="location"
type="location"
type="attachment" media="image/jpeg"
type="photo"
type="attachment" media="image/svg+xml"
type="signature"
type="enum"
type="single-choice-integer"
type="enum_set"
type="multiple-choice-integer"
n/a
type="single-choice"
n/a
type="boolean"
n/a
type="multiple-choice"
type="myobject" array="true"
type="query:myobject"
These changes are automatically applied by the migration process.
Component Names
<selectbox type="radio" />
<single-choice-radio />
<selectbox type="dropdown" />
<single-choice-dropdown />
<textinput />
<text-input />
<date />
<date-input />
<datetime />
<datetime-input />
<checklist />
<multiple-choice-checklist />
<barcode />
<scan-barcode />
<gps />
<capture-coordinates />
<signature />
<capture-signature />
n/a
<display-signature />
<picture />
<capture-photo />
<viewpicture />
<display-photo />
<list type="dropdown" />
<object-dropdown />
<list type="static" />
<object-list />
<object-table />
<object-table />
<table> <info label="...">...</info> <info label="...">...</info> </table>
<info-table> <row label="...">...</row> <row label="...">...</row> </info-table>
<button id="proceed" />
<button type="primary" />
<button link="some_link" />
<button on-press="link.some_view()" />
These changes are automatically applied by the migration process.
JavaScript Functions
These changes are not automatically applied by the migration process, and have to be applied manually.
Query#fetch()
Query#toArray()
Query#get()
Query#first()
Query#destroy_all()
Query#destroyAll()
Query#order_by()
Query#orderBy()
Query#fetch().forEach(function(object) {...})
Query#forEach(function(object) {...})
DatabaseObject#set_all()
DatabaseObject#setAll()
return link.some_link();
link.some_view();
Last updated