使用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);
}
}
});
});