javascript - Backbone : how to update a property of all models with a single command

标签 javascript backbone.js

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

是的,我能想到循环遍历集合来更改每个模型的属性。有没有更简单的方法可以实现此目的?

最佳答案

在我正在进行的一个项目中,我们在集合级别维护“选定”项目。我们添加了 getCurrent()setCurrent(model) 方法,并且集合将引发 change:selection 事件。这对我们来说非常有效。

--编辑:每个请求的代码示例。--

以下是我们为所有集合扩展的 base.collection.js 的一部分。您会注意到,我们可以根据 id 或实际模型设置 current,因此 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;
    },

关于javascript - Backbone : how to update a property of all models with a single command,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7834661/

相关文章:

javascript - backbone.js 中的动态 el 值

javascript - Windows 窗体 Web 浏览器控件和 Javascript 更改的 DOM

javascript - express 和卡斯珀 : Can't set headers after they are sent

javascript - 更改数组时 Knockout JS 不更新

backbone.js - 是否可以为集合动态定义比较器函数?

javascript - backbone.js 和 Handlebars :string is not a function

backbone.js 2 级挑战 5 codeschool 答案

javascript - 在 DIV 中配对数组元素

JavaScript:迭代 document.evaluate() XPathResult 返回 null

javascript - Backbone.js:结合多个模型的复杂 View