我正在创建一个简单的文件夹列表,当点击它们时,它们将被标记为已选中,即他们的模型将其selected
属性更改为true。我希望此选项是独占的 - 在标记文件夹被选中之前,应将所有其他文件夹标记为未选中。
正确的是我能想到循环遍历集合来改变每个模型的属性。有没有更容易实现的方法?
答案 0 :(得分:3)
在我正在进行的项目中,我们在集合级别维护“选定”项。我们添加了getCurrent()
和setCurrent(model)
方法,该集合将引发change:selection
事件。这对我们来说非常有效。
- 编辑:每个请求的代码示例.--
以下是我们为所有集合扩展的base.collection.js的一部分。您会注意到我们可以根据ID或实际模型设置当前值,因此col.setCurrent(123)
和col.setCurrent(anInstanceOfAModel)
都可以正常工作。同时调用setCurrent
表示已经是当前模型的模型不会触发更改事件
setCurrent: function (id)
{
var isModel = !(_.isString(id) || _.isNumber(id));
var triggerChange = this._setupCurrent(isModel
? id
: this.get(id));
if (triggerChange)
this.trigger("change:current", this._current);
return this.getCurrent();
},
getCurrent: function ()
{
return this._current;
},
_setupCurrent: function (current)
{
var old = this._current;
this._current = current;
if (current && old && old.id == current.id)
return false;
return true;
},
答案 1 :(得分:2)
您还可以拥有一个“状态”对象,您可以在其中存储最后选择的文件夹。
然后您将其更改为未选中,而无需遍历整个集合。