Question

I have code to search the typed words from the text box, Get the typed word, search it in the collection and show the result in the HTML page.

In that i can search the word exactly as it is, using LIKE.

(i.e)

search: function(type,letters){
    var pattern = new RegExp(letters,"gi");
    return _(this.filter(function(data) {
        return pattern.test(data.get(type));
    }));
}

If the model has,

  1. Hello Doctor
  2. Hi Sir
  3. Hello World
  4. Welcome Programmer

And the user types as "Hello", it shows me

Hello Doctor Hello World

I need to display the result even if the user wrongly arranges the words,

i.e If the user types as "World Hello"

It is not showing any results. But, I want to show the user

Hello World

The same scenario is solved in web SQL.
Ref here

I want to achieve this in the backboneJS collection. Can you please help me?

Was it helpful?

Solution

You could split your text on spaces and then iteratively filter the models and reduce them to the desired selection. For example:

var C = Backbone.Collection.extend({
    search: function(type, letters) {
        var words = letters.split(/\s+/), //array of words
            models = _.clone(this.models); //copy of the models

        //for each word, check if it is found in the given attribute
        _.each(words, function(word) {
            var pattern = new RegExp(word, "i");
            models = _.filter(models, function(model) {
                return pattern.test(model.get(type));
            });
        });

        return models;
    }
});

And a demo http://jsfiddle.net/ha8RM/1/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top