Прототип нескольких авто завершает - PullRequest
1 голос
/ 23 мая 2011

Я пытаюсь создать интерфейс администратора, в котором можно выбирать модели разных типов, а затем сохранять их как новый объект.

Event.observe($('modelSearch'),'focus',function(){
    new Ajax.Autocompleter( 'modelSearch', 'autoCompleteModel', 'xxx',
    {
        paramName: "q",
        indicator: "makeWaitPic",
        parameters: "previusId=" + $( 'previusModelId' ).getValue(),
        afterUpdateElement: function( text, li )
            {
                if( li.id != '' )
                    $( 'modelId' ).value = <AjaxReturnValue>;
                else
                    $( 'modelSearch' ).value = '';
            }
    } );
});

Проблема, с которой я столкнулся, заключается в том, что когда у меня естьавтозаполнение, которое зависит от другого автозаполнения, я получаю проблему.Первое автоматическое заполнение позволяет выбрать модель и сохранить выбранный идентификатор модели в скрытом поле ввода.Это значение используется вторым автоматическим завершением, чтобы он знал, в какую таблицу БД он должен смотреть.

задача 1 : Если я создаю оба автоматических завершения в dom: load, они будут читатьвходное значение до того, как оно было установлено.И поэтому второе автоматическое завершение не будет работать.

задача 2 : если я создаю автоматическое завершение при наблюдении: focus они будут каждый раз читать значение заново, но затем также будут создавать несколько экземпляров.каждый из них фокусируется на поле автозаполнения.

Можно ли каким-либо образом заставить автозаполнение читать входное значение заново каждый раз, когда я его использую, и запускать его только один раз?Или я могу каким-либо образом уничтожить объект, который поддерживает автоматическое завершение после того, как я его использовал, и в следующий раз создать новый?

Как я могу решить эту проблему, какие-либо идеи?

1 Ответ

1 голос
/ 24 мая 2011

Я решил это, создавая новый элемент ввода каждый раз, когда изменяется первое значение, таким образом удаляя старый ввод и привязанный к нему объект автозаполнения.И затем создание нового автозаполнения, связанного с новым полем ввода.

if( $( 'previousModelId' ).getValue() != prevId ){
    $('modelSearch').remove();
    $('wrapperId').insert({'top': '<input type="text" id="modelSearch" name="modelSearch" size="30" title="search model here." />'});
    initModelSearch();
    prevId = $( 'previousModelId' ).getValue();
}
...