首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone Marionette集合过滤

Backbone Marionette集合过滤
EN

Stack Overflow用户
提问于 2013-10-22 22:30:44
回答 2查看 3.4K关注 0票数 1

我试图让用户在一个集合中搜索displayNames和电子邮件。

到目前为止,我的整个复合视图看起来像下面的代码。这将呈现并记录我的var搜索,但是我不确定如何使用collection.where,并且在新的Backbone.Collection之后,我是否应该调用render?

代码语言:javascript
复制
define(["marionette", "text!app/templates/bamboo/employees/collection.html", "app/collections/bamboo/employees",
  "app/views/bamboo/employees/item", "jquery"],
  function(Marionette, Template, Collection, Row, $) {
    "use strict"
    return Backbone.Marionette.CompositeView.extend({
      template: Template,
      itemView: Row,
      itemViewContainer: "ul",
      collectionEvents: {
        'sync': 'hideLoading'
      },
      events: {
        'keyup #filter-input': 'initialize'
      },
      initialize: function () {
        var search = $('#filter-input').val()

        if (typeof(search) != "undefined") {
          console.log(search)
          var filtered = //somehow search collection displayName and email by value search
          this.collection = new Backbone.Collection(filtered);
        } else {
          this.showLoading()
          this.collection = new Collection()
          return this.collection.fetch()
        }
      },
      showLoading: function() {
        this.$el.addClass('loading')
      },
      hideLoading: function() {
        this.$el.removeClass('loading')
      }
  })
})
EN

回答 2

Stack Overflow用户

发布于 2013-10-22 23:42:42

您可以使用view.children._viewsMarionette CollectionViewCompositeView获取视图。

使用如下代码:

代码语言:javascript
复制
_.each(colView.children._views,function(v){
  if(!condition){
     v.$el.hide();
  }
});

您可以在没有条件的colView中隐藏视图(在本例中,条件可以是v.model.get('type') == 'todo')。

票数 2
EN

Stack Overflow用户

发布于 2013-10-23 04:15:46

我认为,如果只实例化集合的单个实例,然后调用模型上的函数,这可能会更容易。

代码语言:javascript
复制
return Backbone.Marionette.CompositeView.extend({
    template: Template,
    itemView: Row,
    itemViewContainer: "ul",
    events: {
        'keyup #filter-input': 'filter'
    },
    initialize: function() {
       this.filter();
    },
    filter: function () {
        var search = $('#filter-input').val() || '';
        this.collection.invoke('set', 'filter', search);
    },
    // ...
});

然后,对于您的itemViews

代码语言:javascript
复制
Row = Backbone.Marionette.ItemView.extend({
    modelEvents: {
        "change filter": "filter"
    },
    filter: function(model, search) {
        if (model.shouldBeShown(search)) {
            this.$el.show();
        } else {
            this.$el.hide();
        }
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19520730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档