使用jQueryUI.autocomplete和主干JS的Javascript模块

使用jQueryUI.autocomplete和主干JS的Javascript模块,javascript,jquery,jquery-ui,backbone.js,requirejs,Javascript,Jquery,Jquery Ui,Backbone.js,Requirejs,假设我想使用jQueryUi.autocomplete创建一个模块,该模块从backboneCollection获取源代码 我为自动完成模块实现了以下代码(1)和 骨干网视图(2)如下所示 实际上,我不喜欢它,因为当用户不键入任何字母时,也会执行集合的获取 仅当用户开始在输入框中键入内容时,我应该如何执行获取集合或源函数 附言: 我已经发布了一个类似的问题, 但是由于aoutocomplete模块的需求可以在不同的视图之间共享,所以我决定将集合的获取移到autocomplete模块中 (一)

假设我想使用
jQueryUi.autocomplete
创建一个模块,该模块从
backboneCollection
获取源代码

我为自动完成模块实现了以下代码(1)和
骨干网视图(2)如下所示

实际上,我不喜欢它,因为当用户不键入任何字母时,也会执行集合的获取

仅当用户开始在输入框中键入内容时,我应该如何执行
获取集合
源函数


附言:
我已经发布了一个类似的问题, 但是由于aoutocomplete模块的需求可以在不同的视图之间共享,所以我决定将集合的获取移到autocomplete模块中


(一)

//来自

}))

编辑-20120711--------- 这个怎么样:

//伪代码

// View1 (view using the module autocomplete)
define([
    'autoCompleteModule'
], function (autoCompleteModule) {
    var MyView = Backbone.View.extend({

        events: {
            'keydown #names': 'getAutocomplete'
        },
        getAutocomplete: function (e) {
            var el = $('#names');
            if(!el.data){
                autoCompleteModule(el);
            }
        }
    });
});

谢谢,+1为你的想法…实际上我所要求的是有点不同。如果您只有一个使用autocomplete和myCollection的视图,那么您的伪代码工作得很好。假设有两个视图使用同一个myCollection,那么对于同一个集合将有两个fetch。出于这个原因,我为自动完成创建了一个模块。@LorraineBernard key,我更新了答案,看看它是否不是您想要的。
// View1 (view using the module autocomplete)
define([
    'autoCompleteModule'
], function (autoCompleteModule) {
    var MyView = Backbone.View.extend({

        events: {
            'focus #names': 'getAutocomplete'
        },
        getAutocomplete: function (e) {
            autoCompleteModule($('#names'));
        }
    });
});
var MyView = Backbone.View.extend({
initialize: function () {
    this.myCollection = new MyCollection();

},
events: {
    'focus #names': 'getAutocomplete',
    'keydown #names':'invokefetch'
},
invokefetch : function(){
   this.myCollection.fetch(); 
   $("#names").unbind( "keydown", invokefetch);
},    
getAutocomplete: function () {
    $("#names").autocomplete({
        source: JSON.stringify(this.myCollection)
    });
}
// View1 (view using the module autocomplete)
define([
    'autoCompleteModule'
], function (autoCompleteModule) {
    var MyView = Backbone.View.extend({

        events: {
            'keydown #names': 'getAutocomplete'
        },
        getAutocomplete: function (e) {
            var el = $('#names');
            if(!el.data){
                autoCompleteModule(el);
            }
        }
    });
});