0

私は要点からこのコードのベースを取りました。fetch()最初にコレクションを編集し、次にrender()tw-bootstap を呼び出したとき、最初は完全に機能しました.typeahead()

keypressただし、によって返されるデータのサイズを制限しようとするイベントを入れましたfetch()。コレクション データが返され、適切にフィルタリングされてprepData()に到達しrender()ます。ただし、その段階では先行入力は機能していません。その時点でバックボーン イベントが render をオーバーライドしている可能性がありますか?

// typeahead on the numbers
var Bootstrap = {};

Bootstrap.Typeahead = Backbone.View.extend({
    el: '#autocompleteN',
    tagName: 'input',
    attributes: {"data-provide": "typeahead"},
    initialize: function(options){
        if(!this.collection) {
            return null;
        }

        //this.collection.on("reset", this.prepData, this);
    },
    events: {
        "keypress": "setSearch"
    },

    setSearch: _.throttle(function(e) {
        var that=this;
        var d = e.currentTarget.value;

        // strip spaces and remove non-numerics
        d = d.replace(/ /g,'');
        d = d.replace(/[^0-9]/g, '');

        // if it's longer than 2, call a fetch;
        if(d.length > 2) {
            $.when( app.searchNums.fetch({url: 'api/index.php/search/num/'+d}) ).then(function() { 
                //console.dir("success");
                that.prepData();
            });
        }

    }, 1000),
    prepData: function() {
        //console.dir("prepData called");
        var prepare = _.pluck(this.collection.models, 'attributes');
        this.property = this.options.property || _.keys(prepare[0])[0];

        this.items = this.options.items;
        this.data = _.pluck(prepare, this.property);

        this.render();
    },
    render: function() {
        var that = this;
        that.$el.typeahead({
            source: that.data,
            //source: ['PHP', 'MySQL', 'SQL', 'PostgreSQL', 'HTML', 'CSS', 'HTML5', 'CSS3', 'JSON'],
            items: that.items,
            onselect: function( data ) {  
                // render the results view here
            }
        });

        return this;
    }
});

var bui = new Bootstrap.Typeahead({
    collection: app.searchNums,
    items: 5
});
4

1 に答える 1

0

タイプアヘッドを設定minLengthしないのはなぜですか。それがあなたがやろうとしていることのようです。

于 2013-03-27T12:23:05.620 に答える