【问题标题】:Implementing Backbone.Subset.js in Backbone.js to filter Models from a parent Collection在 Backbone.js 中实现 Backbone.Subset.js 以从父集合中过滤模型
【发布时间】:2011-11-21 16:05:40
【问题描述】:

this stackoverflow post 中,我阅读了有关过滤主干集合和使用子集的信息。

一个答案(通过雪橇)建议使用backbone.subset.js (usage example)。

我在backbone.subset.js 上找不到任何其他资源,并且未能将其实施到我的项目中。

似乎 backbone.subset.js 是我想要实现的完美解决方案。

(拥有一个始终保存所有模型的“父”集合,并根据用户输入将父集合中的相关模型过滤到一个主干子集集合中。)

我的“父”集合,包含所有任务:

var TasksAll = Backbone.Collection.extend({
    url: '/tasks', // the REST url to retrieve collection data
    model: Task // the models of which the collection consists of
});
var allTasks = new TasksAll();

现在我想创建一个子集集合,例如task.status = 0 的任务:

var TasksTrash = new Backbone.Subset({
    superset: allTasks,
    filter: function(Task) {
        return Task.isTrash();
    }
});
var trashTasks = new TasksTrash();

而在 Task 模型中,“isTrash”方法在以下情况下返回 true:

this.get('status') == 0

a)backbone.subset.js 上还有更多资源吗?

b) 如何实现上述场景?

c) 我可以将“superset”和“filter”选项作为参数传递给 Backbone.Subset init 函数吗?

d) 我查看了主干.subset.js 代码,当我“重置”我的父集合时,我的子集集合应该立即更新,对吧?

PS:我对 Backbone 还很陌生。感谢您的帮助。

【问题讨论】:

标签: javascript client-side


【解决方案1】:

查看主干子集的来源,看起来好像有一个预初始化钩子,您可以利用它来使“筛子”或过滤器作为选项或参数可用:

https://github.com/masylum/Backbone.Subset/blob/master/backbone.subset.js#L50

至于提供 parent 作为参数,有一个出色的补丁可以添加确切的功能:

https://github.com/masylum/Backbone.Subset/pull/5

有了它,你可以传入 parent 作为一个选项,如果它不是一个选项,库将回退到在对象 Prototype 上寻找它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2012-04-07
    • 2011-10-31
    相关资源
    最近更新 更多