2015-05-19 5 views
3

Я поставил точку останова внутри функции datumTokenizer, но она никогда не вызывает вызова. Почему нет? Работает ли он с данными удаленного доступа?Почему мой datumTokenizer никогда не звонит?

var engine = new Bloodhound({ 
    datumTokenizer: function(d) { 
     return Bloodhound.tokenizers.obj.whitespace(d); 
    }, 
    queryTokenizer: Bloodhound.tokenizers.nonword, 
    identify: function(obj) { return obj.id; }, 
    remote: { 
     url: '/typeahead/%QUERY', 
     wildcard: '%QUERY' 
    }, 
    limit: 5 
}); 

$('#city_or_zip').typeahead({ 
    hint: true, 
    minLength: 2 
}, { 
    display: function(data) { 
     return formatCityState(data); 
    }, 
    source: engine.ttAdapter(), 
    templates: { 
     empty: 'No results found', 
     suggestion: function (data) { 
      return '<p>' + formatCityState(data) + '</p>'; 
     } 
    } 
}); 

JSON вернулся из удаленного:

[ 
    { 
     "id":568, 
     "state":"al", 
     "city":"pittsview" 
    }, 
    { 
     "id":4095, 
     "state":"ga", 
     "city":"pitts" 
    } 
] 
+0

здесь возвращают Bloodhound.tokenizers.obj.whitespace (D); insteaf of d u передает строковое значение Bloodhound.tokenizers.obj.whitespace («name») – sakir

+0

Это даже не ударяет по этому коду. Ничто в функции datumTokenizer не вызвано. –

+0

@ StephenHorvath вы когда-нибудь получали удаленный доступ к работе? – Zion

ответ

2

Вот это рабочий пример http://jsfiddle.net/x7pLsb79/

Я немного modified.instead из удаленных данных я использовал местные, но и работает точно так же.

HTML

<input id="city_or_zip" class="typeahead"></input> 

JS

var dt=[ 
     { 
      "id":568, 
      "state":"al", 
      "city":"pittsview" 
     }, 
     { 
      "id":4095, 
      "state":"ga", 
      "city":"pitts" 
     } 
    ]; 
    var formatCityState= function(data){ 
     return data.city+"*formated*"+data.state ; 
    } 
    var engine = new Bloodhound({ 
     datumTokenizer: Bloodhound.tokenizers.obj.whitespace("city"), 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     local:dt 

    }); 

    $('#city_or_zip').typeahead({ 
     hint: true, 
     minLength: 1 
    }, { 

     display: function(data) { 
      return formatCityState(data); 
     }, 
     source: engine.ttAdapter(), 
     templates: { 
      empty: 'No results found', 
      suggestion: function (data) { 
       return '<p>' + formatCityState(data) + '</p>'; 
      } 
     } 
    }); 
+0

Спасибо. Проблема в том, что я хочу написать свой собственный токенизатор. И когда я устанавливаю переменную datumTokenizer в свою функцию, она никогда не вызывается. –

+0

emm, я не уверен, что вы хотите получить в качестве последнего результата, извините. Но если вы хотите сделать что-то вроде somethhh, как это (datumTokenizer: Bloodhound.tokenizers.obj.whitespace («mytoken»)), я хочу, чтобы фильтр результат сначала через, фильтр: функция (данные) {return newarray} – sakir

2

данных дистанционного не индексируется, как разработчик объяснил в this issue. Есть фиксация, чтобы добавить это как вариант. Кстати, проект twitter typeaheadjs в настоящее время оставлен, поэтому кто знает, когда это сообщение может быть объединено. Есть некоторое движение вокруг вилки, где коммит, вероятно, будет объединен (см. here).

+0

эта проблема была решена? – Zion

1

Хорошее решение

autocomplete:function(){ 
     var branchOffice = $('#branch_office_id').val(); 
     var productSource = new Bloodhound({ 
      datumTokenizer: function(productObj) { 
       return Bloodhound.tokenizers.whitespace([productObj.product.name+' '+productObj.product.sku+' '+productObj.product.code+' '+productObj.product.category.name+' '+productObj.product.unit.name]); 
      }, 
      queryTokenizer: Bloodhound.tokenizers.whitespace, 
      prefetch: { 
       url: url_product+'/'+branchOffice, 
       cache: false, 
      } 
     }); 
     $('#search_product').typeahead({ 
      hint: true, 
      highlight: true, 
      minLength: 1 
     },{ 
      name: 'name', 
      displayKey: function(data) { 
       return data.product.name; 
      }, 
      limit: 10, 
      source: productSource.ttAdapter(), 
      templates: { 
       empty: function(){ 
        return '<div class="widget-main"><div class="alert alert-danger">No encotramos coincidencias</div></div>' 
       }, 
       suggestion: function (data){ 
        return '<div>'+data.product.sku+' - '+data.product.name+' | '+data.product.code+' - '+data.product.category.name+' - '+data.product.unit.name+'</div>' 
       } 
      } 
     }); 
    } 

Пример JSON

[{ 
    "id":29, 
    "product_id":10, 
    "branch_office_id":6, 
    "quantity":0, 
    "price_n":"1.00", 
    "price_h":"1.00", 
    "stock_min":1, 
    "product":{ 
     "id":10, 
     "category_id":4, 
     "unit_id":2, 
     "sku":"010100001", 
     "code":"KE-1000011", 
     "name":"SIN CATEGORIA", 
     "image":"\/image\/avatars\/no_photo.jpg", 
     "order":1000011, 
     "price_buy":"1", 
     "category":{ 
      "id":4, 
      "order":1, 
      "code":"01", 
      "abr":"KE", 
      "name":"KENDA" 
     }, 
     "unit":{ 
      "id":2, 
      "code":"01", 
      "name":"PZA" 
     } 
    } 
}, 
{ 
    "id":33, 
    "product_id":11, 
    "branch_office_id":6, 
    "quantity":0, 
    "price_n":"1.00", 
    "price_h":"1.00", 
    "stock_min":1, 
    "product":{ 
     "id":11, 
     "category_id":4, 
     "unit_id":2, 
     "sku":"010100002", 
     "code":"KE-324233434", 
     "name":"SDFSDFSDFSD", 
     "image":"\/image\/avatars\/no_photo.jpg", 
     "order":324233434, 
     "price_buy":"1", 
     "category":{ 
      "id":4, 
      "order":1, 
      "code":"01", 
      "abr":"KE", 
      "name":"KENDA" 
     }, 
     "unit":{ 
      "id":2, 
      "code":"01", 
      "name":"PZA" 
     } 
    } 
}] 
+0

О, мужчины это действительно потрясающе !!! У меня возникла проблема с работой моего экземпляра Bloodhound с локальным массивом объектов, я много гуглировал и читал документацию, но я не видел аксимала о том, как правильно обращаться с массивом настраиваемых объектов. Моя проблема была решена с помощью datumTokenizer, как вы это делали. Большое спасибо!! – Oswaldo