1
我簡單地過濾收集模型。每個模型都有字段'標題'。頁面包含:標題和搜索欄的列表。
用戶在searchfield中輸入字母,但標題列表未被過濾。這問題
模型和集合:
APP.NewsModel = Backbone.Model.extend({
defaults:{
"title": ""
}
});
APP.NewsModelsCollection = Backbone.Collection.extend({
model: APP.NewsModel,
search : function(letters){ console.log(letters)
if(letters == "") return this;
var pattern = new RegExp(letters,"gi");
return _(this.filter(function(data) {
return pattern.test(data.get("title"));
}));
}
});
觀點:
APP.Filter = Backbone.View.extend({
initialize: function() {
var self = this;
this.collection = new APP.NewsModelsCollection();
var model1 = new APP.NewsModel({title: 'qwerty'}),
model2 = new APP.NewsModel({title: 'qwddez'}),
model3 = new APP.NewsModel({title: 'zxxc'});
this.collection.add(model1);
this.collection.add(model2);
this.collection.add(model3);
this.render();
$('#filterTitleField').on('keyup', function() { self.search() });
},
render: function() {
this._createNewsUnits();
return this;
},
search: function(e){ console.log('search')
var letters = $("#filterTitleField").val();
this.collection.search(letters);
console.log(this.collection.models)
this._createNewsUnits();
},
_createNewsUnits: function() {
$('#newsList').html('');
this.collection.each(function (news) {
var news = new APP.News({model: news});
$('#newsList').append(news.render().el);
}, this);
}
});
APP.News = Backbone.View.extend({
initialize: function(model) {
this.model = model.model;
},
className: 'news',
template: _.template($('#newsUnitTpl').html()),
render: function() {
this.$el.html(this.template({title: this.model.get('title')}));
return this;
}
});
你返回的過濾列表,但你不這樣做與該名單什麼。 'search'只是返回一個** new **列表。它不會改變你的原始。 –