Backbone.js 已更改,无法在主干网1.1.2中工作
代码笔: 预期行为:一次只能突出显示一项 当前行为:可以高亮显示多个项目 原因:在Backbone.js 已更改,无法在主干网1.1.2中工作,backbone.js,Backbone.js,代码笔: 预期行为:一次只能突出显示一项 当前行为:可以高亮显示多个项目 原因:在更改事件期间,当控制器检查时,HasChanged返回true 当我使用主干0.9.2运行这段代码时,它可以正常工作。当我使用1.1.2时,它不会 在这两个版本之间,的工作方式发生了根本性的变化吗?我相信这是理想的功能。每次设置模型本身时,模型的属性都会发生更改。因此,在多次设置模型之前,它将保留其更改。如果在选择不同的模型时清除了更改的散列,那么您在此处设置的代码将起作用。实际情况是,只要将模型设置为isSele
更改
事件期间,当控制器检查时,HasChanged返回true
当我使用主干0.9.2运行这段代码时,它可以正常工作。当我使用1.1.2时,它不会
在这两个版本之间,
的工作方式发生了根本性的变化吗?我相信这是理想的功能。每次设置模型本身时,模型的属性都会发生更改。因此,在多次设置模型之前,它将保留其更改。如果在选择不同的模型时清除了更改的散列,那么您在此处设置的代码将起作用。实际情况是,只要将模型设置为isSelected
,它将始终具有isSelected==true
和hasChanged('isSelected')
,因此它将永远不会通过将isSelected
设置为false的条件
实现您所寻找的目标的一种方法是将收集方法更改为:
onSelectedChanged: function(modelActive) {
if(modelActive.get('isSelected') === true){
this.each(function(model) {
if (model != modelActive) {
model.set({isSelected: false});
}
});
}
}
请注意,我取出了hasChanged
,因为这只是确认模型在以前某个点发生了更改。相反,我将主动选择的模型与正在迭代的模型进行比较。我们不想碰活动的那个。我还检查此方法是否是通过将isSelected
设置为true
触发的,因为如果不这样做,迭代模型的每个设置都将触发此方法并导致问题
唯一的限制是你不能选择同一个项目来关闭它