2012-07-22 8 views
5

ich an dieser Stelle bin :)Wie kann ich Objekte über mehrere Eigenschaften (knockout.js + twitter bootstrap typeahead) suchen?

http://blogs.msdn.com/b/rebond/archive/2012/07/18/knockout-js-binding-for-bootstrap-typeahead-plugin.aspx

// Bootstrap.Typeahead binding: presently requires custom version from gist: https://gist.github.com/1866577. 
// Use like so: data-bind="typeahead: { target: selectedNamespace, source: namespaces }" 
ko.bindingHandlers.typeahead = { 
    init: function(element, valueAccessor) { 
    var binding = this; 
    var elem = $(element); 
    var value = valueAccessor(); 

    // Setup Bootstrap Typeahead for this element. 
    elem.typeahead(
    { 
    source: function() { return ko.utils.unwrapObservable(value.source); }, 
    onselect: function(val) { value.target(val); } 
    }); 

// Set the value of the target when the field is blurred. 
elem.blur(function() { value.target(elem.val()); }); 
    }, 
    update: function(element, valueAccessor) { 
var elem = $(element); 
var value = valueAccessor(); 
elem.val(value.target()); 
    } 
}; 

I X-Klasse mit 4 Eigenschaften aufweisen.

Ich möchte X Objekt-Array über seine 3 Eigenschaften suchen. (Andere Eigenschaft ist id)

Irgendeine Idee?

+0

Ich denke, dass Sie benutzerdefinierten Matcher für typeahead zu implementieren. –

Antwort

4

In Ihrem .typeahead Anruf, übergeben ein matcher function, die an Ihrer anderen Eigenschaft aussehen:

elem.typeahead({ 
    source: function() { return ko.utils.unwrapObservable(value.source); }, 
    onselect: function(val) { value.target(val); }, 
    matcher: function(item) { 
     // Check if it matches Foo, Bar, or Baz properties. 
     return item.Foo.indexOf(this.query) >= 0 || item.Bar.indexOf(this.query) >= 0 || item.Baz.indexOf(this.query) >= 0; 
    } 
}); 
+0

Judah, kann ich davon ausgehen, dass das mit dem Bootstrap 2.2 out of the box funktioniert? –

+0

Ich habe es nicht auf 2.2 versucht, aber ich sehe keinen Grund, warum es nicht aus der Box funktionieren würde. Siehst du etwas anderes? –