Backbone:如何使用单个命令更新所有模型的属性

时间:2011-10-20 10:35:27

标签: javascript backbone.js

我正在创建一个简单的文件夹列表,当点击它们时,它们将被标记为已选中,即他们的模型将其selected属性更改为true。我希望此选项是独占的 - 在标记文件夹被选中之前,应将所有其他文件夹标记为未选中。

正确的是我能想到循环遍历集合来改变每个模型的属性。有没有更容易实现的方法?

2 个答案:

答案 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)

您还可以拥有一个“状态”对象,您可以在其中存储最后选择的文件夹。

然后您将其更改为未选中,而无需遍历整个集合。