1

私はオートコンプリートを使用しています。リストにヘッダーを追加したいのですが、複雑になっています。これにはいくつか問題があります:これは私のコードです:

 var autocompleteCounselor = function () {

              $(this.el).find('.alternateCounselorAutocomplete').autocomplete({
                  minLength: 0,
                  source: this.counselorValidDelegates,
                  focus: function (event, ui) {
                    console.log(ui);
                      $(".alternateCounselorAutocomplete").val(ui.item.NAME());
                      return false;
                  },
                  select: function (event, ui) {
                      onAutocompleteAlternateCounselorSelected.apply(_self, [event, ui, _self.counselorFullValidDelegates]);
                  }
                }).data("ui-autocomplete")._renderMenu = function(ul, items){
                  var self = this;

                  ul.append("<li><span>Name</span>"+
                    "<span>Title</<span>" +
                    "<span>Phone</<span> "+
                    "<span>Location</<span>"+
                    "<span>Department</span></li>");
                    $.each(items, function(index, item){
                       /*return $("<li>")
                          .append("<div class='listcounsuler'><span>" + "<a>" + item.NAME() + "</a>" + "</span>" + "<span>" + item.TITLE() + "</span>" + "<span>" + item.PHONE() + "</span>" + "<span>" + item.LOCATION() + "</span>" + "<span>" + item.DEPARTMENT() + "</span>" + "</div>")
                          .appendTo(ul);*/
                           self._renderItem(ul, item);
                     });
                 /* ul.append("</tbody></table>");*/


                };

               $('.alternateCounselorAutocomplete').autocomplete().data("ui-autocomplete")._renderItem = function (ul, item) {
                      return $("<li>")
                       .append("<div class='listcounsuler'><span>" + "<a>" +
                        item.NAME() + "</a>" + "</span>" + "<span>" + item.TITLE() +
                        "</span>" + "<span>" + item.PHONE() + "</span>" + "<span>" +
                        item.LOCATION() + "</span>" + "<span>" + item.DEPARTMENT() +
                        "</span></div>")
                    .appendTo(ul);
              };

              $('.alternateCounselorAutocomplete').autocomplete("search", "");

              $(this.el).find('.counselorEdit').on('click', function () {
                  $('.alternateCounselorAutocomplete').autocomplete('close');
              });

          };

メニューは完全にレンダリングされます。問題は、li にフォーカスすると、コンソールに次のエラーが表示されることです: Uncaught TypeError: Cannot call method 'NAME' of undefined

フォーカスの項目が未定義であることがわかります: オブジェクト {item: undefined}

関数レンダー アイテムも正常に動作しています。必要な「li」が表示されます。
_renderItem を _renderItemData で変更しましたが、引き続き発生します。いくつかのことを試しましたが、解決策が得られませんでした。どんな助けでも大歓迎です。

よろしく

4

1 に答える 1

0

render_menu から self._renderItemData. に呼び出して解決しました。

于 2013-05-12T20:29:22.727 に答える