0
Исправлен
Ошибка в jQuery плагине при формированию value по объекту адреса
У Вас явная ошибка в jQuery плагине.
если передать плагину следующий параметр
{ bounds: "city-settlement" }, тогда при вводе "Железнодорожный" в подсказках будет показываться "Московская обл, г Железнодорожный", а при выборе этого варианта - в поле запишется "г Железнодорожный", а должно писаться именно как в подсказке.
Чтобы изменить это поведение, я изменил параметр на { bounds: "region-area-city-settlement" }, тогда при вводе "Железнодорожный" - все правильно и показывается в подсказках и при выборе "Московская обл, г Железнодорожный"
а вот для запроса "Москва" - в подсказках будет показываться "г Москва" а при выборе - "г Москва, г Москва", соответственно для этого варианта ситуация следующая - когда происходит выбор варианта подсказки - к вам на сервер уходит запрос с параметром { count: 1 }, он возвращает объект suggestion, внутри которого поле value заполнено как надо "г Москва", потом этот объект suggestion попадает вот в эту функцию:
Т.к. запрос к вашему серверу при выборе подсказки уходит с параметрами { count: 1, from_bound: {value: "region"}, to_bound: {value: "settlement"} }, т.е. с учетом bounds, то и ответ приходит правильно отформатированный уже, поэтому по-сути вызов composeValue - просто лишний, поэтому у себя я просто исправил функцию checkValueBounds вот так:
P.S. Еще у меня есть проблема - наша компания задумывается о приобретении standalone версии подсказок, чтобы обезопасить себя от вопросов доступности вашего сервиса, но мне никак не может ваш менеджер толком объяснить - что именно будет работать по-другому в standalone версии, но говорит что точно чего-то не будет, а чего до конца не ясно, в общем плавает ваш менеджер в этом вопросе... Я предложил чтобы не разбираться с этим вопросом на словах, а опробовать в деле - можете ли вы запустить у себя отдельную чистую standalone версию, и давать к ней доступ хотя бы по запросу через менеджера, а то как-то стремно покупать лицензию на что-то что работает так же, но только не совсем точно так же, а вот по-другому:) Хочется перед покупкой оттестировать именно на том функционале который и будет приобретен.
P.P.S. Спасибо за ваш сервис - все очень круто!)
если передать плагину следующий параметр
{ bounds: "city-settlement" }, тогда при вводе "Железнодорожный" в подсказках будет показываться "Московская обл, г Железнодорожный", а при выборе этого варианта - в поле запишется "г Железнодорожный", а должно писаться именно как в подсказке.
Чтобы изменить это поведение, я изменил параметр на { bounds: "region-area-city-settlement" }, тогда при вводе "Железнодорожный" - все правильно и показывается в подсказках и при выборе "Московская обл, г Железнодорожный"
а вот для запроса "Москва" - в подсказках будет показываться "г Москва" а при выборе - "г Москва, г Москва", соответственно для этого варианта ситуация следующая - когда происходит выбор варианта подсказки - к вам на сервер уходит запрос с параметром { count: 1 }, он возвращает объект suggestion, внутри которого поле value заполнено как надо "г Москва", потом этот объект suggestion попадает вот в эту функцию:
checkValueBounds: function (suggestion) { var that = this, valueData; // If any bounds set up if (that.bounds.own.length && that.type.composeValue) { valueData = that.copyBoundedData(suggestion.data, that.bounds.own); suggestion.value = that.type.composeValue(valueData); } }И здесь поле value перезаписывается через функцию composeValue
composeValue: function (data) { return utils.compact([ data.region_with_type || utils.compact([data.region, data.region_type]).join(' '), data.area_with_type || utils.compact([data.area_type, data.area]).join(' '), data.city_with_type || utils.compact([data.city_type, data.city]).join(' '), data.settlement_with_type || utils.compact([data.settlement_type, data.settlement]).join(' '), data.street_with_type || utils.compact([data.street_type, data.street]).join(' '), utils.compact([data.house_type, data.house, data.block_type, data.block]).join(' '), utils.compact([data.flat_type, data.flat]).join(' '), data.postal_box ? 'а/я ' + data.postal_box : null ]).join(', '); }Но она очевидно работает не правильно, т.к. вы в обновлении 15.7 - сделали следующий пункт:
Адрес одной строкой формируем с учетом требований Почты России: если город — центр региона, название региона не пишется (г Новосибирск, ул Абаканская, д 21). Если центр района — не пишется название района (Московская обл, г Одинцово, ул Ракетчиков).А в функции composeValue - value просто формируется объединеннием всего подряд - вот и получается что от сервера приходит правильный value "г Москва", а функция composeValue возвращает неправильное значение "г Москва, г Москва".
Т.к. запрос к вашему серверу при выборе подсказки уходит с параметрами { count: 1, from_bound: {value: "region"}, to_bound: {value: "settlement"} }, т.е. с учетом bounds, то и ответ приходит правильно отформатированный уже, поэтому по-сути вызов composeValue - просто лишний, поэтому у себя я просто исправил функцию checkValueBounds вот так:
checkValueBounds: function (suggestion) { return; var that = this, valueData; // If any bounds set up if (that.bounds.own.length && that.type.composeValue) { valueData = that.copyBoundedData(suggestion.data, that.bounds.own); suggestion.value = that.type.composeValue(valueData); } }
P.S. Еще у меня есть проблема - наша компания задумывается о приобретении standalone версии подсказок, чтобы обезопасить себя от вопросов доступности вашего сервиса, но мне никак не может ваш менеджер толком объяснить - что именно будет работать по-другому в standalone версии, но говорит что точно чего-то не будет, а чего до конца не ясно, в общем плавает ваш менеджер в этом вопросе... Я предложил чтобы не разбираться с этим вопросом на словах, а опробовать в деле - можете ли вы запустить у себя отдельную чистую standalone версию, и давать к ней доступ хотя бы по запросу через менеджера, а то как-то стремно покупать лицензию на что-то что работает так же, но только не совсем точно так же, а вот по-другому:) Хочется перед покупкой оттестировать именно на том функционале который и будет приобретен.
P.P.S. Спасибо за ваш сервис - все очень круто!)
Ответ
Кирилл, насчет jQuery-плагина отвечу сегодня в течение дня. По поводу постскриптума: я так понял, что с менеджером вы сегодня уже все обсудили. Мы еще добавили в базу знаний страницу про разницу межде standalone и облачными подсказками: https://dadata.userecho.com/topic/906651
Да еще раз все обсудили - теперь стало гораздо яснее, спасибо!
И еще, мне кажется, в базу знаний стоит добавить инфу, что все ответы на запросы с count > 1 работают абсолютно одинаково и через сервис и в standalone версии, а вот на запросы с count = 1 уже появляются различия.
Именно эта информация позволила мне окончательно принять решение.
Хорошо бы добавить и сюда https://dadata.userecho.com/topic/906651 и сюда http://dadata.userecho.com/topic/797454-pochemu-podskazki-vozvraschayut-raznyie-znacheniya-v-zavisimosti-ot-count/
И еще, мне кажется, в базу знаний стоит добавить инфу, что все ответы на запросы с count > 1 работают абсолютно одинаково и через сервис и в standalone версии, а вот на запросы с count = 1 уже появляются различия.
Именно эта информация позволила мне окончательно принять решение.
Хорошо бы добавить и сюда https://dadata.userecho.com/topic/906651 и сюда http://dadata.userecho.com/topic/797454-pochemu-podskazki-vozvraschayut-raznyie-znacheniya-v-zavisimosti-ot-count/
Запланирован
Проблема с форматированием Москвы при использовании bounds есть, посмотрим, как лучше исправить. Спасибо за багрепорт!
Ответ
Исправили проблему с bounds, два раза Москву не пишем:
https://cdn.jsdelivr.net/npm/suggestions-jquery@17.5.0/dist/js/jquery.suggestions.min.js
https://cdn.jsdelivr.net/npm/suggestions-jquery@17.5.0/dist/css/suggestions.min.css
Сервис поддержки клиентов работает на платформе UserEcho
Исправили проблему с bounds, два раза Москву не пишем:
https://cdn.jsdelivr.net/npm/suggestions-jquery@17.5.0/dist/js/jquery.suggestions.min.js
https://cdn.jsdelivr.net/npm/suggestions-jquery@17.5.0/dist/css/suggestions.min.css