Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Div
classapi-page

fluid.model.transformWithRules(model, rules)

Section
Column
width70%

Transforms a model based on a specified expansion rules objects.

Code Block
javascript
javascript
bgColorwhite
borderStylenonejavascript
fluid.model.transformWithRules(model, rules);

File name: ModelTransformations.js

Parameters

Span
classborderless-table

model

(Object) the model to transform

rules

(Object) a rules object containing instructions on how to transform the model (see below for more information)

options

(Object) a set of rules governing the transformations. At present this may contain the values:
isomorphic: true indicating that the output model is to be governed by the same schema found in the input model, or
flatSchema holding a flat schema object which consists of a hash of EL path specifications with wildcards, to the values "array"/"object" defining the schema to be used to construct missing trunk values.

Return Value

Span
classborderless-table

Object

the transformed model

Column
width5%
 
Column

See Also


Rules

Rules objects take the form of:

Code Block
javascript
javascript
{
    "target.path": "value.el.path" 
}

or

Code Block
javascript
javascript
{
    "target.path": {
        transform: {
            type: "transform.function.path",
             ...
        }
    }
}

Transformation Expanders

The Framework currently provides the following expanders that can be used as part of a model transformation.

  • fluid.transforms.value
  • fluid.transforms.arrayValue
  • fluid.transforms.firstValue
  • fluid.transforms.merge

Each of these is described below.

fluid.transforms.value

This extracts and/or the value of a given path, and can be used for the following purposes:

To rename a property:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    cat: "meow",
    ...
}
Column



>>

Column

Rule to rename "cat" to "feline":

Code Block
javascript
javascript
var rules = {
    feline: { 
        transform: {
            type: "fluid.transforms.value",
            // specify only the path to transform
            inputPath: "cat"
        }
    },
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    feline: "meow",
    ...
}

To set a default value:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    gerbil: undefined,
    // or if "gerbil" doesn't exist
    ...
}
Column



>>

Column

Rule to set default value of "gerbil":

Code Block
javascript
javascript
var rules = {
    gerbil: { 
        transform: {
            type: "fluid.transforms.value",
            // specify path and default value
            inputPath "gerbil",
            value: "squeek"
        }
    },
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    gerbil: "squeek",
    ...
}

Note that if "gerbil" has a value initially, it will be unaffected.

To specify a literal value:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    // no mention of kangaroos
    ...
}
Column



>>

Column

Rule to set a value for "kangaroo":

Code Block
javascript
javascript
var rules = {
    kangaroo: { 
        transform: {
            type: "fluid.transforms.value",
            // specify only a value
            value: "boingg"
        }
    },
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    kangaroo: "boingg",
    ...
}

To change the structure/nesting:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    goat: false,
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}
Column



>>

Column

Rule to change the nesting:

Code Block
javascript
javascript
var rules = {
    "farm.goat": {                                          
        transform: {
            type: "fluid.transforms.value",
            inputPath "goat"
        }
    },
    "farm.sheep": {
        transform: {
            type: "fluid.transforms.value",
            inputPath "sheep"
        }
    } 
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    farm: {
        goat: false,
        sheep: [
            "baaa",
            "wooooool"
        ]
    },
    ...
}

fluid.transforms.arrayValue

The arrayValue expander will transform a value into an aray. If the value is already an array, the expander will have no effect.

For example:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    cat: "meow",
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}
Column



>>

Column

Rule to convert to arrays:

Code Block
javascript
javascript
var rules = {
    cat: {                                          
        transform: {
            type: "fluid.transforms.arrayValue",
            inputPath "cat"
        }
    },
    sheep: {
        transform: {
            type: "fluid.transforms.arrayValue",
            inputPath "sheep"
        }
    } 
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    cat: ["meow"],
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}

Note that the value of cat is now an array, but the value of sheep is unaffected.

fluid.transforms.firstValue

fluid.transforms.merge

Example

Code Block
javascript
javascript
 

In this example, description here...