我试图让用户在一个集合中搜索displayNames和电子邮件。
到目前为止,我的整个复合视图看起来像下面的代码。这将呈现并记录我的var搜索,但是我不确定如何使用collection.where,并且在新的Backbone.Collection之后,我是否应该调用render?
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')
}
})
})发布于 2013-10-22 23:42:42
您可以使用view.children._views从Marionette CollectionView和CompositeView获取视图。
使用如下代码:
_.each(colView.children._views,function(v){
if(!condition){
v.$el.hide();
}
});您可以在没有条件的colView中隐藏视图(在本例中,条件可以是v.model.get('type') == 'todo')。
发布于 2013-10-23 04:15:46
我认为,如果只实例化集合的单个实例,然后调用模型上的函数,这可能会更容易。
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
Row = Backbone.Marionette.ItemView.extend({
modelEvents: {
"change filter": "filter"
},
filter: function(model, search) {
if (model.shouldBeShown(search)) {
this.$el.show();
} else {
this.$el.hide();
}
}
});https://stackoverflow.com/questions/19520730
复制相似问题