Backbone.js 如何筛选主干集合并呈现结果

Backbone.js 如何筛选主干集合并呈现结果,backbone.js,Backbone.js,如果这是一个简单的问题,请道歉 我已成功加载集合并呈现视图。然而,我有一个标签下拉列表,我想使用过滤器来过滤显示的数据。我试图在视图中设置一个事件侦听器,然后在视图中触发一个函数来过滤结果并重新呈现视图 这是我的密码: IBA.NewsModel = Backbone.Model.extend({}); IBA.NewsCollection = Backbone.Collection.extend({ model: IBA.NewsModel, url: "/news/api"

如果这是一个简单的问题,请道歉

我已成功加载集合并呈现视图。然而,我有一个标签下拉列表,我想使用过滤器来过滤显示的数据。我试图在视图中设置一个事件侦听器,然后在视图中触发一个函数来过滤结果并重新呈现视图

这是我的密码:

IBA.NewsModel = Backbone.Model.extend({});
IBA.NewsCollection = Backbone.Collection.extend({
    model: IBA.NewsModel,
    url: "/news/api"
});
IBA.NewsView = Backbone.View.extend({
  el: '#main',
  template: _.template($("#news-article").html()),

  events: {
    "change .dropdown-item": "filterNews"
  },

  initialize: function () {
    this.collection = new IBA.NewsCollection();
    this.listenTo(this.collection, 'reset', this.render);
    this.collection.fetch({
      success: function() {
        console.log("JSON file load was successful");
        view.render();
      },
      error: function(){
        console.log('There was some error in loading and processing the JSON file');
      }
    });
  },

  render: function () {
      this.$el.html(this.template({ 
        articles: this.collection.toJSON() 
      })
    );
    return this;
  },

  filterNews: function (e){
    e.preventDefault();
    var items = this.collection.where({cat_name: "interviews"});
    console.log(items);
    this.$el.html(this.template({articles: this.items.toJSON()}));
  }
});

var view = new IBA.NewsView();

最简单的方法是使用过滤结果重置实际集合:

IBA.NewsModel=Backbone.Model.extend({});
IBA.newscolection=Backbone.Collection.extend({
型号:IBA.NewsModel,
url:“/news/api”
});
IBA.NewsView=Backbone.View.extend({
el:“#main”,
模板:35;.template($(“#新闻文章”).html()),
活动:{
“更改.下拉项”:“filterNews”
},
初始化:函数(){
this.collection=new IBA.newscolection();
this.listenTo(this.collection,'reset',this.render);
这是fetchNews();
},
fetchNews:function(){
var视图=此;
这是我的收藏({
成功:函数(){
log(“JSON文件加载成功”);
view.render();
},
错误:函数(){
log('加载和处理JSON文件时出错');
}
});
},
render:function(){
this.$el.html(this.template({
文章:this.collection.toJSON()
}));
归还这个;
},
filterNews:函数(e){
e、 预防默认值();
this.collection.reset(this.collection.where({
猫名:“采访”
}));
}
});
var view=new IBA.NewsView();

如果要返回原始数据,请使用
fetchNews()
方法再次获取它


您还有一个语法错误,
视图
未在
初始化

谢谢TJ中定义。这个解决方案非常有效。但是,如果我不想每次都重新加载新闻,你会建议什么方法?我有几个过滤器类别,我认为使用这种方法,每次都必须重新加载数据。我是否可以对集合进行预排序,并将其分配给每个类别的对象,然后进行渲染?出于某种原因,“单击”事件也会出现。下拉项似乎没有附加。这是一个Twitter引导组件,我想tbjs已经超越了click事件。你知道我该如何解决这个问题吗?我只是处理了没有被触发的“click”事件,似乎除非DOM通过主干模板函数呈现,否则它不知道元素,因此没有注册事件。这是标准还是什么问题?这有什么办法吗?