type
can.Map.prototype.define.type
Converts a value passed to attr into an appropriate value.
define.type(newValue, attrName)
Converts a value passed to attr into an appropriate value.
Parameters
-
newValue
{*}
The value passed to
attr
. -
attrName
{String}
The attribute name being set.
Returns
{*}
The value that should be passed to set
or (if there is no set
property) the value to set on the map instance.
This
{can.Map}
the instance of the can.Map.
Use
The
type
property specifies the type of the attribute. The type can be specified as either a type function that returns the type coerced value or one of the following strings:"string"
- Converts the value to a string exceptnull
orundefined
."date"
- Converts the value to a date ornull
if the date can not be converted."number"
- Passes the value throughparseFloat
except fornull
orundefined
."boolean"
- Converts falsey,"false"
or"0"
tofalse
and everything else to true."htmlbool"
- Likeboolean
, but also converts empty strings totrue
. Used, for example, when input is from component attributes like<can-tabs reverse/>
"compute"
- If the value set is a compute, will allow the returning of the computed value."*"
- Prevents the default type coersion of converting Objects to can.Maps and Arrays to can.Lists.Basic Example
The following example converts the
count
property to a number and theitems
property to an array:When a user tries to set those properties like:
The number converter will be used to turn count into 4, and the items type converter function will be used to turn items into [1,2,3].
Preventing Arrays and Objects from Automatic Conversion
When an array is passed into a can.Map setter, it is automatically converted into a can.List. Likewise, objects are converted into can.Map instances. This behavior can be prevented like the following:
When a user tries to set this property, the resulting value will remain an array.
Working with the 'compute' type
Setting type as
compute
allows for resolving a computed property with the .attr() method.