• Создание сервера с базой данных. С чего начать?

    Есть классика - LAMP стек: Apache + PHP + MySQL. Как уже писали выше, если хотите на JS - MEAN стек: Angular + Node +MongoDB.
    Если хотите на Java: смотрите в сторону Spring MVC.
    Ответ написан
    Комментировать
  • Шаблонизатор twig на js?

    На JavaScript'е есть много других шаблонизаторов и даже фреймворков для организации архитектуры
    Ответ написан
  • Здача по JS (замыкания)?

    Первый вариант, однозначно - правильный. Только я бы сделал не IIFE, а через промежуточную функцию:
    var getAdder = function () { var res = 0; return function(x) { res += x; return res; } };
    var sum = getAdder();
    sum(1); // 1
    sum(3); // 4
    var sum2 = getAdder(); // два независимых сумматора
    sum2(1); //1
    sum2(3); // 4


    А насчет второго варианта: зачем использовать такой синтаксис ? Крайне неудобно на мой взгляд.
    А главное, вы замыкаете функцию на внешнюю переменную - это не очень хорошо. Поясню:
    var adder2 = new Function('x', 'var result = adder.last? adder.last + x : x; adder.last = result;  return result');
    adder2(2); //ReferenceError: adder is not defined

    Поэтому, от второго решения я бы отказался.
    Ответ написан
    8 комментариев
  • Почему происходит магия в JS коде?

    Я не знаток CoffeeScript, но судя по всему, ваш скрипт генерирует вот такой JS код (ссылка на jsfiddle):
    var a = [ { id: 0 }, { id: 1 }, { id: 2 } ];
    for(var i = 0; i != a.length; ++i)
    {
        var el = a[i];
        setTimeout(function() { 
            console.log('timeout',el);
        },100);
    }


    В этом случае вы замыкаете вашу анонимную функцию на переменную el, значение которой меняется на каждой итерации. Таким образом после окончания цикла значение el будет равно последнему элементу массива. А так как анонимная функция будет вызвана после завершения цикла, то это приведет к результату, который вы описали:
    timeout Object { id: 2 }
    timeout Object { id: 2 }
    timeout Object { id: 2 }


    Для того, чтобы ваш код выполнялся правильно - можно сделать такой трюк: передавать el в качестве аргумента в некую функцию, которая возвратит нам коллбэк функцию (пример на jsfiddle):
    var a = [ { id: 0 }, { id: 1 }, { id: 2 } ];
    var createCB = function(e){
        return function() { 
            console.log('timeout',e);
        };
    };
    for(var i = 0; i != a.length; ++i)
    {
        var el = a[i];
        setTimeout(createCB(el),100);        
    }


    В этом случае при создании коллбэка у нас в области видимости будет всегда текущее значение el:
    timeout Object { id: 0 }
    timeout Object { id: 1 }
    timeout Object { id: 2 }
    Ответ написан
    1 комментарий
  • Как правильно вывести записи из бд с оформлением?

    Могу предложить такой вариант: у вас будет код, который будет обрабатывать данные (грубо говоря - контроллер) и шаблон, который будет вставлять готовые данные в html (это называется view).

    Функция рендера такого шаблона может выглядеть так:
    function render($templateName, $templateData)
    {
            extract($templateData,EXTR_SKIP);
            ob_start();
            require($templateName);
            return ob_get_clean();
    }


    В этой функции мы с помощью extract все ключи ассоциативного массива $templateData превращаем в переменные текущей области видимости (они попадут в шаблон). Первый параметр - путь к шаблону.

    Вызываться в контроллере она будет примерно так:
    $templateVars = array();
    $templateVars['data'] = array();
    $templateVars['content'] = array(); // итд
    while ($templateVars['data'][] = mysqli_fetch_assoc($result));
    $html = render('templates/templ1.php',$templateVars);
    echo $html;


    А код шаблона будет выглядеть примерно так (тот самый файл templates/templ1.php, который мы использовали выше):
    <?php for($i = 0; $i != count($data); ++$i) { $row = $data[$i]; ?>
        <div class='panel panel-default'>
            <div class='panel-heading'><h4><?=$row['title']?></h4></div>
            <div class='panel-body story'>
                <?=$content[0]?>
                <div class='clearfix'></div>
                <hr>
                <div class='row'>
                    <p class='col-xs-6 text-left'>
                          <a href='post.php?id=<?=$row['id']?>'>Прочитать</a>
                    </p>
                    <p class='col-xs-6 text-right'>
                          <span class='glyphicon glyphicon-comment'><?=$row['countcomments']?></span>
                    </p>
                </div>
            </div>
        </div>
    <?php } ?>


    Очень желательно ничего с данными в шаблоне не делать.
    Ответ написан
  • Angular. Как добавить scope у директивы и при этом иметь доступ к переменной из scope контроллера?

    Присмотритесь к
    scope.$parent
    В случае, если директива находится сразу внутри контроллера scope.$parent будет указывать на scope контроллера.

    Хотя я не считаю это хорошим решением. Если директива будет просто так обращаться в другой scope, то, возможно, Вам нужно пересмотреть архитектуру ...
    Ответ написан
  • Angular.js как отследить изменение высоты элемента в директиве?

    Возможно, вам поможет вот этот метод

    myModule.directive("positioning", function($http, $compile) {
        return {
            restrict: 'A',
            link: function(scope, element, attrs) {
                var height;
                $(element).load(function(){
                    height = $(this).height();
                });
                return scope.$watch((function() {
                    return height;
                }), function(newValue, oldValue) {
                    return console.log(newValue);
                });
            }
        };
    });
    Ответ написан
    Комментировать
  • Как получить значение inpu с блоков с одинаковым классом?

    Я так понимаю, что у вас вот так выглядит иерархия DOM:
    div.food_box_scroll_item > div.btn_food_box_scroll > a.but_call_min

    Тогда вам надо немного подправить ваш JS:
    $('.but_call_min').click(function(){
        console.log('Selected:',$(this).closest('.food_box_scroll_item').find(".value_number_of_servings").val());
    });

    Этот код выводит в консоль значение с input.

    А вот так будет выглядеть Ваш код:
    /*Add to cart*/
    $(document).ready(function() {
    	$(".food_box_scroll_item .btn_food_box_scroll .but_call_min").click(function(){
    		prod_id = $(this).attr("rel");
    		count_this = parseInt($(this).closest('.food_box_scroll_item').find(".value_number_of_servings").val());		
    		// addToCart(prod_id, count_this);
                    // alert(count_this); // - так плохо
                    console.log(count_this); // - так хорошо
    	});
    });
    Ответ написан
  • Как определить что посетитель режет рекламу?

    Это делается на JS. Я предполагаю что под фразой "режет рекламу" вы имели ввиду - удаляет или скрывает ее со страницы. Если да - то с помощью JS мы можем проверить удалены(или спрятаны) ли блоки с рекламой, или - нет.

    Вот примерно так:
    if(    $( '#blockID' ).length == 0 
        || $( '#blockID' ).css( "display" ) == 'none' 
        || parseFloat($( '#blockID' ).css( "opacity" )) != 1.0)
    {
        // Реклама удалена
    }
    Ответ написан
    Комментировать
  • Почему не работает cross-domain HTTP OPTIONS запросы?

    iNikNik
    @iNikNik Автор вопроса
    Прошла неделя. Я не сдался :)

    После различных экспериментов - мне стало понятно, что проблема где-то в конфигурации апача. Так как OPTIONS-запросы не доходят до моего htaccess. Но, поскольку, я ни разу в жизни не работал с этим конфигом - я не знал что искать и что исправлять.

    Но однажды я наткнулся на пост на stackoverflow с заголовком - "Как настроить апач, чтобы он блокировал OPTIONS-запросы". Эврика! Это было то, что нужно! И я без труда нашел в своем конфиге OpenServera следующие строки:
    <Directory "%ssitedir%/*">
        AllowOverride All
        Options -MultiViews +Indexes +FollowSymLinks +IncludesNoExec +Includes +ExecCGI
        <LimitExcept GET POST HEAD >
            Require all denied
        </LimitExcept>
    </Directory>

    И добавил OPTIONS запрос:
    <Directory "%ssitedir%/*">
        AllowOverride All
        Options -MultiViews +Indexes +FollowSymLinks +IncludesNoExec +Includes +ExecCGI
        <LimitExcept GET POST HEAD OPTIONS DELETE>
            Require all denied
        </LimitExcept>
    </Directory>


    Все заработало! Ура, товарищи!!
    Ответ написан
    3 комментария
  • AngularJS. С чего начать, не имея опыта работы с другими фреймворками?

    Сам недавно начал изучение angularjs. Прошел курс для новичков на кодскул - https://www.codeschool.com/courses/shaping-up-with.... Он бесплатный. А дальше начал разрабатывать свой проект взяв за основу angular-seed.
    Ответ написан
    Комментировать
  • Как задержать построение документа или обработку директивы до получения данных с сервера?

    Я использовал $broadcast для такой задачи. В вашем случае - добавить в контроллер отправку сообщения 'dataloaded':
    Order.query({id: 'all'}, function(orders) {
            $scope.orders = orders;
            console.log('get data from server');
            $scope.$broadcast('dataloaded');
          });


    А в директиве сделать инициализацию при наступлении события dataloaded:
    .directive('orderDrct', ['$compile',
        function ($compile) {
          return {
            restrict: 'A',
            link: function (scope, element) {
              scope.$on('dataloaded', function ()
              {
                  // Ваш код
                  console.log('end of directive');
              });          
            }
          };
        }
      ]);


    В этом случае ваш код выполниться после того как придет событие dataloaded.
    Ответ написан
  • Скрыть адрес вызываемой функции. С/C++?

    iNikNik
    @iNikNik Автор вопроса
    Я нашел решение: делаем указатель - глобальной переменной. А не локальной, как у нас было до этого.

    void (*gFunPtr)(int) = (void(*)(int)) ((int*)f+3); // Глобальная переменная

    И, тогда в функции foo2 :
    void foo2(int a)
    {
        void (*fptr)(int) = gFunPtr;
        ...
    }

    В release-сборке это присваивание будет выглядеть так:
    mov eax,[000403024]
    ...

    В свою очередь, по адресу 00403024 (это адрес нашей глобальной переменной gFunPtr) мы видим:
    6C104000
    Как известно у нас обратный порядок байт - следовательно в переменной gFunPtr содержится значение 0040106C. А это не что иное как:
    00401060(адрес функции f) + С (3 * sizeof int)
    Все получилось!)
    Ответ написан
    Комментировать
  • ASM, x86, Объясните строчку с командой CMP?

    iNikNik
    @iNikNik Автор вопроса
    UPD. Поигрался с калькулятором ... оказывается FFFFE0BE это и есть -8002 ... тогда все сходится:

    v -= 10000;
    if(v <= -8002)
        // code

    и с этим вопрос закрыт. Буду знать ))))
    Но вопросы с форматом команды остаются.
    Ответ написан
    Комментировать
  • Каким образом лучше реализовать такую карту

    У меня такое решение: берем прямоугольный блок и сдвигаем его - получается параллелограмм. Но проблема в том, что все содержимое будет тоже сдвинуто (например: обычный текст станет наклонным). Поэтому, внутри мы делаем еще контейнер, который сдвигаем в обратном направлении, и помещаем туда карту (в примере - просто картинка):
    jsfiddle.net/Rc6MV/2

    PS плохо, только то, что в классе .map появляется магия в виде margin-left: -45px - чтобы сдвинуть блок к началу параллелограмма (нижний левый угол)
    Ответ написан
    Комментировать