Working with Model in the Client
Sometimes we need to manipulate the data model in the client. In order to do this, backbone offers useful methods to access and filter the data on client-side.
Create a new model and save it
bean = app.data.createBean('<NAME_OF_THE_MODULE>');
bean.set('<FIELD_NAME>', "<VALUE>");
bean.save();
- NAME_OF_THE_MODULE: Name of the module you want to create a record.
- FIELD_NAME: Name of the field you want to set a value.
- VALUE: Value to be assigned fo a field.
Filter methods in the model collection in the client
let bean_collection = app.data.createBeanCollection('<NAME_OF_THE_MODULE>');
bean_collection.fetch({
fields: ["<field_to_be_returned>","<field_to_be_returned_2>"],
filter: [
{
"<FIELD_1>": {
"$equals": '<VALUE>'
},
"<FIELD_2>": {
"$lte": '<VALUE_2>'
},
}
],
success: function (data) {
console.log(data.models);
}
}
);
In the procedure above, we created a bean collection that will be used to retrieve a set of records from database based on a query we will run on the client-side.
- NAME_OF_THE_MODULE: Name of the module you want to create a record.
- FIELD_TO_BE_RETURNED: Fields that should be returned in the model.
- FIELD_1, FIELD_2: Fields that will be used for filtering
In the filter parameter, we can specify any field which we want to filter by in order to retrieve records from the database. We have a list of operators to execute operations such as equal, different, and others.
Below, a list with all operators:
- $equals: the value of the field should de equal to a specified value
- $not_equals: the value of the field should not be equal to a specified value
Used for text fields
- $starts: the value of the field should start with a specified value (used for varchar field)
Used for enum fields
- $in: the value of the field should match one of the values in the list
- $not_in: the value of the field should not match the values specified in the list
Used for multi enum fields
- $contains: list field should contain one of the values in the list
- $not_contains: list field should not contain the values specified in the list
Used only for numeric fields
- $gt: the value of the field should be greater than a specific value
- $lt: the value of the field should be lower to a specific value
- $gte: the value of the field should be greater or equal than a specific value
- $lte: the value of the field should be lower or equal than a specific value
- $between: the value of the field should contain a specific value within a specific range
Useful listeners functions in the model
this.model.on("data:sync:complete", _.bind(this.fetchModel, this));
this.model.on("reset", _.bind(this.fetchModel, this));
this.model.on("change:pr_type", this.setType, this);
A data model has several events triggered when a specific action happens. The most common events are described below.
- data:sync:complete: Event triggered when the model is completed sync.
- reset: Event triggered to fix when a client model is not synchronized to the server. Following an update on the client-side only. For example, when a record is removed from a client model.
- sync: Event triggered for every sync operation made by the model.
- change:field_name: Event triggered when the value of one specific field is changed.
| The change event will be triggered even when the model is being synced for the first time. In order to avoid it, we should use the parameter inSync of the model |
Example:
fillDataFromParent: function()
{
if (!this.model.inSync) {
// code
}
}
Access related model from a current model
fetchModel: function()
{
this.model.fetch();
}
this.model.getRelatedCollection("<NAME_OF_THE_RELATIONSHIP_1>").on("data:sync:complete", _.bind(this.fetchModel, this));
this.model.getRelatedCollection("<NAME_OF_THE_RELATIONSHIP_2>").on("reset", _.bind(this.fetchModel, this));
this.model.getRelatedCollection("<NAME_OF_THE_RELATIONSHIP_3>").on("reset", _.bind(this.fetchModel, this));
When a record is loaded the main model holds all related model used by subpanels in the record view.
In the code above, we can access a related model used to populate a subpanel. This related collection might not be populated and, in order to populate it, the method fetch should be called.
Be Careful
- It is usually not populated when a subpanel is closed.
- This related collection will only bring records displayed on the subpanel associated.
Contact us using the form below if you have any questions