I have a model that is set with a JSON response from a mysql database. The model data is set with true or false into a boolean/tinyint field in the database, which uses 1
or 0
.
In my view, I have a binding that checks for a boolean with underscore's _.isBoolean
. Of course, when my model receives the data, it is set with 1
or 0
instead of true or false and the _.isBoolean
check fails.
Is there anyway to either correctly have my JSON response from mysql be a boolean true or false value instead of 1
or 0
, or preferably, is there a way to have my model update itself upon fetch (and before the view renders) to cast true
or false
based on it's 1 or 0 property?
e.g. my model's data looks like {"isChecked":"1"}
when I need it to be {"isChecked":true}
Thank you greatly for any suggestions you may have!
This question is related to
javascript
jquery
backbone.js
Here's another option that's longer but may be more readable:
Boolean(Number("0")); // false
Boolean(Number("1")); // true
Use a double not:
!!1 = true;
!!0 = false;
obj.isChecked = !!parseInt(obj.isChecked);
Boolean(Number(myVar))
or
!!+myVar
You could assign the comparison of the property to "1"
obj["isChecked"] = (obj["isChecked"]==="1");
This only evaluates for a String value of "1"
though. Other variables evaulate to false like an actual typeof number
would be false. (i.e. obj["isChecked"]=1
)
If you wanted to be indiscrimate about "1"
or 1
, you could use:
obj["isChecked"] = (obj["isChecked"]=="1");
console.log(obj["isChecked"]==="1"); // true
console.log(obj["isChecked"]===1); // false
console.log(obj["isChecked"]==1); // true
console.log(obj["isChecked"]==="0"); // false
console.log(obj["isChecked"]==="Elephant"); // false
Same concept in PHP
$obj["isChecked"] = ($obj["isChecked"] == "1");
The same operator limitations as stated above for JavaScript apply.
The 'double not' also works. It's confusing when people first read it but it works in both languages for integer/number type values. It however does not work in JavaScript for string type values as they always evaluate to true:
!!"1"; //true
!!"0"; //true
!!1; //true
!!0; //false
!!parseInt("0",10); // false
echo !!"1"; //true
echo !!"0"; //false
echo !!1; //true
echo !!0; //false
Source: Stackoverflow.com