CodePen :http://codepen.io/opnsrce/pen/hclaH
预期行为:您应该只能一次突出显示一个项目。
当前行为:您可以突出显示多个项目
原因:在change
事件期间,当控制器检查时,HasChanged返回true。
当我使用Backbone 0.9.2运行此代码时,它可以工作。当我使用1.1.2时它没有。
hasChanged
在这两个版本之间的工作方式是否发生了根本性的变化?
答案 0 :(得分:1)
我相信这是所需的功能。每次模型本身为changed
时,模型的set
属性都会更改。因此,在您多次set
模型之前,它将保留其更改。如果在选择其他模型时清除了更改的哈希值,那么您在此处设置的代码将起作用。实际发生的情况是,只要您将模型设置为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
的设置触发的,因为如果我们不这样做,迭代模型到false
的每个设置都会触发此方法并导致问题。
唯一的限制是您无法选择相同的项目来切换它。