소스를 backboneCollection
에서 가져 오는 모듈을 만들기 위해 jQueryUi.autocomplete
을 사용한다고 가정합시다.jQueryUI.autocomplete 및 Backbone JS를 사용하는 자바 스크립트 모듈
자동 완성 모듈에 대해 다음 코드 (1)를 구현하고
에 Backbone.view (2)를 다음과 같이 구현합니다.
사실 나는 사용자가 글자를 입력하지 않은 경우에도 컬렉션의 가져 오기가 수행되기 때문에 실제로 좋아하지 않습니다.
사용자가 입력 상자에 내용을 입력하기 시작한 경우에만 fetching collection
또는 source function
을 어떻게 수행해야합니까?
P.S :
는 이미 비슷한 질문 jQuery Autocomplete Plugin using Backbone JS, 을 기록했지만 aoutocomplete 모듈의 요구가 다른보기에서 공유 할 수 있기 때문에 나는 자동 완성 모듈의 집합으로 인출 이동하기로 결정했다.
(1)
/*global define */
define([
'users',
'jquery',
'jqueryUi'
], function (UserCollection, $) {
"use strict";
var autoComplete = function(element) {
var userCollection,
data;
userCollection = new UserCollection();
userCollection.fetch();
data = userCollection.toJSON();
element.autocomplete({
minLength: 3,
source: function(request, response) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(data, function(value) {
return matcher.test(value.name);
}));
},
create: function() {
element.val(data.name);
},
focus: function(event, ui) {
element.val(ui.item.name);
return false;
},
select: function(event, ui) {
element.val(ui.item.name);
return false;
}
}).data('autocomplete')._renderItem = function(ul, item) {
return $('<li></li>')
.data('item.autocomplete', item)
.append('<a><img src="' + item.avatar + '" />' + item.name + '<br></a>')
.appendTo(ul);
};
};
return autoComplete;
});
(2)가
// View1 (view using the module autocomplete)
define([
'autoCompleteModule'
], function (autoCompleteModule) {
var MyView = Backbone.View.extend({
events: {
'focus #names': 'getAutocomplete'
},
getAutocomplete: function (e) {
autoCompleteModule($('#names'));
}
});
});
덕분에, 당신의 아이디어에 대한 하나 ... 실제로 무엇을 나는 조금 다르다라고 묻고있다. autocomplete 및 myCollection을 사용하는보기가 하나 뿐인 경우 가상 코드가 잘 작동합니다. 동일한 myCollection을 사용하여 동일한 콜렉션에 대해 두 개의 페치를 수행하는 두 개의 뷰가 있다고 가정 해 보겠습니다. 이런 이유로 저는 자동 완성을위한 모듈을 만들었습니다. –
@LorraineBernard 키, 내가 대답을 업데이트했는지, 원하는 것이 아닌지 확인하십시오. –