backbone.js 如何在提取模型时将1转换为true或将0转换为false

jaql4c8m  于 2022-11-10  发布在  其他
关注(0)|答案(6)|浏览(171)

我有一个模型,它是用来自mysql数据库的JSON响应设置的,模型数据是用true或false设置到数据库中的boolean/tinyint字段中的,它使用10
在我看来,我有一个绑定,它检查一个带下划线的布尔值_.isBoolean。当然,当我的模型接收到数据时,它被设置为10,而不是true或false,_.isBoolean检查失败。
是否有任何方法可以正确地让来自mysql的JSON响应是布尔值true或false,而不是10,或者更好的是,是否有一种方法可以让我的模型在提取时(以及在视图呈现之前)更新自己,以根据它的1或0属性转换truefalse
例如,我的模型的数据看起来像{"isChecked":"1"},而我需要它是{"isChecked":true}
非常感谢您的任何建议,你可能有!

xbp102n0

xbp102n01#

您只需要使用+string转换为int,然后使用!!将结果转换为布尔值:

var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked

您可以在parse方法中执行此操作:

parse: function (response) {
  response.isChecked = !!+response.isChecked;
  return response;
}

UPDATE:7年后,我发现Number(string)转换更优雅。而且,改变对象不是最好的主意。也就是说:

parse: function (response) {
  return Object.assign({}, response, {
    isChecked: !!Number(response.isChecked), // OR
    isChecked: Boolean(Number(response.isChecked))
  });
}
5cg8jx4n

5cg8jx4n2#

使用双非:

!!1 = true;

!!0 = false;

obj.isChecked = !!parseInt(obj.isChecked);
li9yvcax

li9yvcax3#

下面是另一个更长但可读性更强的选项:

Boolean(Number("0")); // false
Boolean(Number("1")); // true
eaf3rand

eaf3rand4#

将比较指派给属性值

JavaScript语言
您可以将属性的比较指定为"1"

obj["isChecked"] = (obj["isChecked"]==="1");

这只对字符串值"1"求值。其他变量求值为false,就像实际的typeof number将为false一样。(即obj["isChecked"]=1
如果你想区分"1"1,你可以用途:

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

PHP语言

PHP中的相同概念

$obj["isChecked"] = ($obj["isChecked"] == "1");

与上述JavaScript相同的运算符限制也适用。

双非

'double not'也是有效的。当人们第一次读到它的时候会感到困惑,但是它在两种语言中对整数/数字类型的值都有效。但是它在JavaScript中对字符串类型的值不起作用,因为它们总是求值为true:
JavaScript语言

!!"1"; //true
!!"0"; //true
!!1; //true
!!0; //false
!!parseInt("0",10); // false

PHP语言

echo !!"1"; //true
echo !!"0"; //false
echo !!1; //true
echo !!0; //false
2guxujil

2guxujil5#

Boolean(Number(myVar))

!!+myVar
yrdbyhpb

yrdbyhpb6#

另一种解决方法是创建一个数组来保存布尔值,并将对应的布尔值赋给它的索引。下面我来解释一下:

const bools = [false,true];

使用int或str访问所需的布尔值。
bools['0'] (str)bools[0] (int)在浏览器中应该能很好地工作,并产生正确的值。
希望这对你有帮助

相关问题