Backbone.js:仅从JSON集合中添加新模型

不明确的

我有一个基于Backbone.js的Web应用程序,带有一个列表。列表的条目来自REST API。此列表(JSON数组)会不时更新。我也想在前端更新列表,而无需重新加载页面。

我考虑过要使用轮询器通过API返回的每个新对象来更新文件列表。但是,轮询器不是这里的问题,我首先需要一个函数,仅将模型添加到文件列表中。

API根据以下模型返回JSON列表:

Xff = Backbone.Model.extend({
        defaults: {
                id: null,
                name: "",
                language: "en",
                timestamp: 0,
                status: null,
                progress: 10,
                duration: 0
        }
});

这是集合。restUri指向REST API,并使用/ files获取完整的文件列表。

XffCollection = Backbone.Collection.extend({
        model: Xff,
        comparator: function(a, b) {
             return (a.get("timestamp") > b.get("timestamp") ? -1 : 1);
        },
        url: restUri + "files"
});

这是AppView对象。如上所述,它使用XffCollection。

app = new AppView({
        collection: new XffCollection()
});

AppView是常规的主干视图...

AppView = Backbone.View.extend({ .... })

使用app.collection.fetch()我可以触发请求(在Firebug中可见),但是列表不会更新。我也有一个addAll()函数,但是它只是将新文件列表追加到旧文件列表中。

addAll:

addAll: function() {
  this.collection.chain().sort().each(this.addOne, this);
}

这是addOne:

addOne: function(xff) {
  var v = new XffView({model: xff});
  this.xffViews.push(v);
  $("#xffs").append(v.render().el);
}

如何仅将新条目添加到列表中?

更新

虽然kindasimples anwser现在可以使用,但是前端的文件列表不再使用集合中定义的比较器(带有时间戳)进行排序。使用比较器底部的addAll()对列表进行排序。

为了提供更多信息,这里是整体骨干网代码的更多部分:http : //pastebin.com/rR39x3Y1

从ribs.js文档中:

collection.sort([options])强制集合重新排序。通常情况下,您无需调用此函数,因为只要添加模型,带有比较器的集合便会对其进行排序。要在添加模型时禁用排序,请传递{sort:false}以添加。调用sort会触发集合上的“ sort”事件。

但是它本身不会排序。在获取后立即调用app.collection.sort()也无济于事。

更新2

我通过在返回之前对API中的数组进行排序来修复它。不是应该的样子,但至少现在可以了。

有点简单

你有正确的主意。在获取填充项后进行初始设置时,addOne()将呈现单个项。您可以将侦听器添加到收集事件中以添加新项目。Collection.Fetch通过向集合中添加新模型并保持原有模型不变(只要您不将{reset:true}标志作为参数传递)来完成您想要的操作

因此,在您的视图上,将侦听器添加到Initialize钩子中

initialize: function() {
    this.listenTo(this.collection, "add", this.addOne)
}

您可能需要在Model上定义idAttribute,Xff以便主干网可以正确识别新项目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Backbone.js更新集合中的集合模型

来自分类Dev

Backbone.js将从服务器检索到的模型添加到集合中

来自分类Dev

使用Backbone-如何从JSON访问集合中的模型

来自分类Dev

Backbone.js如何在嵌套集合中检索模型?

来自分类Dev

在Backbone.js中形成多个集合和模型的问题

来自分类Dev

将Backbone模型从集合传递到新视图将集合保存在内存中

来自分类Dev

Backbone.js模型发布

来自分类Dev

向Backbone JS中先前添加的集合中添加集合数组

来自分类Dev

从集合中获取特定的Backbone.js模型,而无需先获取所有模型

来自分类Dev

LocalStorage Backbone.js

来自分类常见问题

Backbone js .listenTo与.on

来自分类Dev

Backbone.js设置

来自分类Dev

Backbone.js视图

来自分类Dev

是否可以为Backbone集合中的新模型生成唯一的ID?

来自分类Dev

Backbone.js集合获得多个模型

来自分类Dev

Backbone.js集合获得多个模型

来自分类Dev

Backbone JS-集合,视图和模型的组合

来自分类Dev

当添加到集合中时,修改模型的Backbone方法是什么?

来自分类Dev

Backbone.js JSON结构

来自分类Dev

在Backbone View的点击事件中创建新的Backbone Views

来自分类Dev

不会在IE浏览器的集合中删除Backbone js模型

来自分类Dev

Backbone.js为什么我的默认模型出现在获取的集合中?

来自分类Dev

Backbone.js为什么我的默认模型出现在获取的集合中?

来自分类Dev

Backbone.js批量更新集合

来自分类Dev

集合的Backbone.js包装器模板

来自分类Dev

简单的Backbone.js集合无限分页

来自分类Dev

Backbone.js批量更新集合

来自分类Dev

在Backbone视图中收听嵌套的Backbone关系模型事件

来自分类Dev

在Backbone Marionette中为相关模型创建新实体

Related 相关文章

热门标签

归档