【问题标题】:Filtering a Collection With Backbone MV*使用 Backbone MV* 过滤集合
【发布时间】:2014-11-27 00:17:52
【问题描述】:

我有一组交易,其中包含金额、描述、类型(借记/贷记)和类别(家庭、汽车、杂项等)。我试图过滤掉我的结果,在这个例子中只显示“家”类别。我有另一个视图来显示我收藏的所有结果。下面我尝试创建一个新的集合“结果”,然后将其输出到我的车把模板。

render: function () {
    var results = this.collection.where({category: "home"});
    var filteredCollectionHome = new Backbone.Collection(results);

    this.$el.html(this.template({filteredCollectionHome: this.collection.homeView(true)}));
}

homeView 在我的收藏文件中。

homeView: function (toJSON) {
        this.sortByDate(-1); // descending so latest are first

        if(!toJSON) {
            return this.models;
        } else {
            var models = this.models,
                idx = -1,
                json = [],
                model;

            while(model = models[++idx]) {
                json.push(model.attributes);
            }
            return json;
        }   

    },

【问题讨论】:

  • 我认为你需要使用 findWhere,而不仅仅是 where...

标签: javascript backbone.js backbone-views backbone.js-collections


【解决方案1】:

在您的集合中添加一个方法,该方法过滤您想要的数据并返回具有过滤结果的新集合。

var Transactions = Backbone.Collection.extend({
  model: Transaction,

  byCategory: function(name) {
    filtered = this.filter(function(trans) {
      return trans.get("category") === name;
      });
    return new Transactions(filtered);
  }

});

var home_transactions = Transactions.byCategory("home")

【讨论】:

  • 所以在我的渲染函数中,我使用了你给我的最后一行代码并尝试将它扔到我的 this.$el.html*this.template(home_transactions));我得到 0 个结果。我在此之前记录了 home_transactions,我得到了一个里面有 1 个数组的对象。但它没有输出到我的模板。我的模板是模板:Handlebars.compile($('#all-transactions-template').html())
  • home_transactions 将返回一个模型数组。您将需要遍历它并输出所需的值
  • 在您的模板中.. 例如,如果您使用下划线。 或者您可以在视图中预先格式化,然后在模板中输出。
  • 你所说的背后的想法是有道理的。但是今天工作了好几个小时之后,我需要休息一下,明天再看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 2013-07-29
  • 2013-03-06
  • 1970-01-01
相关资源
最近更新 更多