• VueJS, как вместе использовать v-model, v-for и input?

    0xD34F
    @0xD34F Куратор тега Vue.js
    В родительском компоненте храните массив объектов с данными:

    data: () => ({
      items: [],
    }),

    На основе этого массива создаёте с помощью v-for экземпляры дочернего компонента, к которым цепляете посредством v-model элементы массива:

    <child-component v-for="(n, i) in items" v-model="items[i]"></child-component>

    В дочернем компоненте делаете вычисляемое свойство: объект с данными, получаемый из родителя, заворачиваете в Proxy, который будет перехватывать установку значений свойств, собирать новый объект и отправлять его назад родителю:

    props: [ 'value' ],
    computed: {
      innerValue() {
        return new Proxy(this.value, {
          set: (target, prop, val) => {
            this.$emit('input', { ...target, [prop]: val });
            return true;
          },
        });
      },
    },

    Используете свойства этого объекта в v-model:

    <input type="text" v-model="innerValue.someStringProp">
    <input type="checkbox" v-model="innerValue.someBooleanProp">
    <input type="number" v-model.number="innerValue.someNumberProp">

    https://jsfiddle.net/aghpL7tf/2/
    Ответ написан
    1 комментарий
  • Как создать событие в Google Calendar по ссылке?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    <a href="http://www.google.com/calendar/event?
    action=TEMPLATE
    &text=[event-title]
    &dates=[start-custom format='Ymd\\THi00\\Z']/[end-custom format='Ymd\\THi00\\Z']
    &details=[description]
    &location=[location]
    &trp=false
    &sprop=
    &sprop=name:"
    target="_blank" rel="nofollow">Add to my calendar</a>


    https://developers.google.com/google-apps/calendar...

    Так-же
    https://support.google.com/calendar/answer/41207?rd=1

    Последний пункт "Кнопки сохранения мероприятий на сайте"
    Ответ написан
    5 комментариев
  • Когда использовать useCallback, useMemo и useEffect?

    @LEXA_JA
    useEffect - это хук, который позволяет использовать сайд эффект. В классах его аналогом было использование componentDidMount, componentDidUpdate и componentWillUnmount. В нем можно делать подписки, отправлять запросы управлять анимацией и т. д.
    const [data, setData] = useState(null);
    
    useEffect(() => {
      const controller = new AbortController()
      fetchData(controller.signal).then(setData)
    
      return () => controller.abort()
    }, [fetchData, setData])


    useCallback и useMemo предназначены для оптимизации. useCallback получает на функцию и массив аргументов, и возвращает одну и туже функцию, до тех пор, пока аргументы не изменились. useMemo отличается тем, что он возвращает не саму функцию, а результат её выполнения. По большому счету они являются взаимозаменямыми.
    Таким образом, useMemo используется для сохранения результатов тяжёлых вычислений, например обработка массива.
    const data = useMemo(() => array.map(mapper).filter(predicate).reduce(reducer), [array])

    А useCallback используется, когда важна постоянность ссылок на функцию. Например, когда мы передаём ссылку в компонент, который использует React.PureComponent или React.memo, или, когда функция используется в качестве аргумента в других хуках
    const handler = useCallback(() => {
      // что-то сделать 
    }, [])
    
    useEffect(() => {
      handler(value)
      // если не использовать useCallback, эффект будет срабатывать постоянно 
    }, [handler, value])
    Ответ написан
    1 комментарий
  • Почему в jQuery событие scroll не работает при body margin: 0;?

    v_decadence
    @v_decadence
    Не понял, причём тут margin: 0. Может дело просто в том, что в примере из вашего архива у вас высота контента меньше окна браузера, скролла нет и соответственно не срабатывает событие. Уменьшение окна браузера или увеличение высоты контента приводит к появлению скролла и срабатыванию события.
    Ответ написан
    3 комментария
  • Почему в jQuery событие scroll не работает при body margin: 0;?

    @Joe_May
    Жесть я 1.5 дня искал эту же ошибку у себя в JS, наткнулся на этот вопрос поиграл со стилями, в результате у меня было свойство body {height: 100%}, поэтому webkit"овские браузеры не запускали событие scroll()... это так если кто в будущем столкнется с этим, автору отдельное спасибо за вопрос =)
    Ответ написан
    6 комментариев
  • Почему перестал работать код для получения котировок валют от цб рф, ссылаясь на "failed to open stream: Redirection limit reached, aborting"?

    alexkbs
    @alexkbs
    Не ЦБ единым... Есть прокси для получения курсов ЦБ РФ без лишних заморочек, во всевозможных форматах.
    https://www.cbr-xml-daily.ru/
    https://www.cbr-xml-daily.ru/daily.xml
    https://www.cbr-xml-daily.ru/daily_utf8.xml
    https://www.cbr-xml-daily.ru/daily_eng.xml
    https://www.cbr-xml-daily.ru/daily_eng_utf8.xml
    https://www.cbr-xml-daily.ru/daily_json.js
    https://www.cbr-xml-daily.ru/daily_jsonp.js

    Работает так: (пример с сайта)
    <div id="USD">Доллар США $ — 00,0000 руб.</div>
    <div id="EUR">Евро € — 00,0000 руб.</div>
    
    <script>
    function CBR_XML_Daily_Ru(rates) {
    	var USDrate = rates.Valute.USD.Value.toFixed(4).replace('.', ',');
    	var USD = document.getElementById('USD');
    	USD.innerHTML = USD.innerHTML.replace('00,0000', USDrate);
    
    	var EURrate = rates.Valute.EUR.Value.toFixed(4).replace('.', ',');
    	var EUR = document.getElementById('EUR');
    	EUR.innerHTML = EUR.innerHTML.replace('00,0000', EURrate);
    }
    </script>
    <script src="https://www.cbr-xml-daily.ru/daily_jsonp.js"></script>

    Огромное преимущество перед выкачкой курсов в XML в том что ничего не нужно качать и парсить на стороне сервера. Ничего такого, что в другом ответе, делать не нужно. Страницы открываются много шустрее.
    Ответ написан
    1 комментарий
  • Что такое такое rest api?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    API социальных сетей - это вполне типичные примеры реализации REST API.

    REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с сервером посредством протокола HTTP. Особенность REST в том, что сервер не запоминает состояние пользователя между запросами - в каждом запросе передаётся информация, идентифицирующая пользователя (например, token, полученный через OAuth-авторизацию) и все параметры, необходимые для выполнения операции.

    Всё взаимодействие с сервером сводится к 4 операциям (4 - это необходимый и достаточный минимум, в конкретной реализации типов операций может быть больше):
    1. получение данных с сервера (обычно в формате JSON, или XML)
    2. добавление новых данных на сервер
    3. модификация существующих данных на сервере
    4. удаление данных на сервере

    Операция получения данных не может приводить к изменению состояния сервера.

    Для каждого типа операции используется свой метод HTTP-запроса:
    1. получение - GET
    2. добавление - POST
    3. модификация - PUT
    4. удаление - DELETE

    Т.е. :

    GET-запрос /rest/users - получение информации о всех пользователях
    GET-запрос /rest/users/125 - получение информации о пользователе с id=125
    POST-запрос /rest/users - добавление нового пользователя
    PUT-запрос /rest/users/125 - изменение информации о пользователе с id=125
    DELETE-запрос /rest/users/125 - удаление пользователя с id=125
    Ответ написан
    20 комментариев
  • Как обработать JSON-данные, которые на самом деле XML?

    RUVATA
    @RUVATA
    Разработчик, гик, меломан, разгильдяй
    Я чего-то не понимаю, или
     function httpGet(theUrl)
        {
        var xmlHttp = null;
     
        xmlHttp = new XMLHttpRequest();
        xmlHttp.open( "GET", theUrl, false );
        xmlHttp.send( null );
        return xmlHttp.responseText;
        }


    и парсим responseText,
    не?
    Ответ написан
    1 комментарий