Страницы

Поиск по вопросам

суббота, 11 апреля 2020 г.

Background-image не работает

#html #css

                    
Здравствуйте! Свойство background-image не работает в файле css. 
Файл находится в папке css.
css/style.css
body {
 background-image: url(img/a.png);
}

index.html



 
 New Page
 





Но в самом файле html свойство background-image работает. 



 
 New Page
 





Подскажите, почему не работает, если я размещаю в в файле css?    


Ответы

Ответ 1



в css файле пропишите body { background-image: url(../img/a.png); /* выходим из папки css на уровень вверх, и заходим в папку img */ }

Ответ 2



Между тегами у вас некорректно написана ссылка на файл CSS. Ваш код должен выглядеть так: New Page Как видите вы не дописали type="text/css" в теге link.

Ответ 3



body { background-image: url(../img/a.png); } http://htmlbook.ru/samhtml/ssylki/absolyutnye-i-otnositelnye-ssylki

Ответ 4



пол суток пробовал background-image: url(../img/a.png); background-image: url("../img/a.png"); ,а оказывается надо вот так background-image: url('../img/a.png'); все заработало ;)

Ответ 5



Всем привет. Была такая же проблема: не работал backgrounf-image: url(link). Мучался часа 2, перепробовал всё, любые модификации но проблема оставалась. Ошибка заключалась в том, что не правильно был указан путь к картинке (файлу), и как не старался - ничего не помогало. Потом, когда я начал думать что html и css - не моё, мне вдруг пришла в голову мысль залезть в настройки. Я пользуюсь Notepad++ и обнаружил вот что: в пункте "Путь по умолчанию" было отмечено "запомнить последнюю директорию", я переставил отметку на "пройти за текущим документом", а в значении селектора background-image указал папку и файл: background-image: url(images/1.jpg) И все заработало. Надеюсь, кому да поможет инфа.

Ответ 6



Судя по имени стиля вам нужен фон страницы. Если не работает, то проверьте правильный ли путь к картинке. то есть ../img/a.png или /img/a.png body { margin: 0; padding: 0; background: url("img/a.png") repeat scroll left top #FFFFFF; overflow-y: scroll; }

Ответ 7



Может помочь указания размеров картинки фона. .image { background-image: url(img/a.png); width: 50px; /* ширина */ height: 50px; /* высота */ }

При нажатии вставить HTML коды в textarea

#jquery #html #css #javascript

                    
Мучаюсь уж как 2 дня, подскажите как сделать такое: 
Есть картинки(иконки)сверху,  нужно, чтобы при нажатие на любую из них в textarea
который ниже находиться вставлялись спец коды к примеру , то есть HTML коды.
мне подсказали что это делается на jquery.    


Ответы

Ответ 1



Используй любой из WYSIWYG-редакторов. Если по-своему, то можно так: HTML:
b
JS: var ta = $('#qwe'), ico = $('.icon'); ico.on('click', function(){ switch ($(this).data('type')){ case 'b': ta.val( ta.val() + '' ); break; //можно дописать другие кейсы для новых иконок } }); Демо Можно улучшить, чтобы обрамляло выделенный текст.

Как узнать, на каком сервере выполняется мой PHP скрипт?

#php

                    
Мой скрип меняет свою работу в зависимости о того, на каком сайте расположен.
Если он выполняется на сайте mydomain.com, то я хочу, чтобы в переменной $q у меня
было 'mydomain.com'. А если на localhost, то, соответственно, 'localhost'.
Спасибо!
    


Ответы

Ответ 1



Выяснить название текущего хоста можно из переменной окружения $_SERVER['SERVER_NAME']. $q = $_SERVER['SERVER_NAME']; switch($q) { case 'mydomain.com' : // Продакшен среда break; default : // Локальная разработка } Можно установить собственную переменную окружения, если стандартная переменная окружения SERVER_NAME по каким-то причинам не подходит. Например, ваш движок используется на нескольких хостах и нельзя размещать имя хоста непосредственно в коде. В этом случае вы можете определить переменные окружения с нейтральными значениями, не зависящими от доменного имени (dev, prod, staging, test и т.п.) Для этого на уровне виртуального хоста или location-секции, отвечающий за обработку php-файлов следует прописать директиву, устанавливающую переменную окружения nginx location ~ \.php$ { ... fastcgi_param APP_HOST prod; ... } apache ... SetEnv APP_HOST prod ... В результате этого в PHP-скрипте будет доступна переменная окружения APP_HOST, получить доступ к котором можно через $_SERVER['APP_HOST'] (значение 'prod').

Как узнать ip “белый” или нет?

#boost #cpp

                    
Нужно программно определить является ли ip "белым". Какие программные пути для этого
существуют? Не знаю может я все усложнил, но поискав, пришел к трем вариантам:

1) Узнать локальный ip, и распрасив его, узнать не попадает ли он под локальный диапазон

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
127.0.0.0/8


Локальный ip определятся так:

boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query(boost::asio::ip::host_name(), "");
boost::asio::ip::tcp::resolver::iterator it = resolver.resolve(query);
boost::asio::ip::tcp::endpoint endpoint = *it;
std::cout << endpoint.address().to_string() << '\n';


Является ли этот способ универсальным для всех видов (большинства) подключений к
Интернет?

2) Узнать еще и внешний ip и сравнить его с локальным.

3) И последний способ. Этот код я скачал с stackoverflow:

try {
    boost::asio::io_service netService;
    udp::resolver   resolver(netService);
    udp::resolver::query query(udp::v4(), "google.com", "");
    udp::resolver::iterator endpoints = resolver.resolve(query);
    udp::endpoint ep = *endpoints;
    udp::socket socket(netService);
    socket.connect(ep);
    boost::asio::ip::address addr = socket.local_endpoint().address();
    std::cout << "My IP according to google is: " << addr.to_string() << std::endl;
 } catch (std::exception& e){
    std::cerr << "Could not deal with socket. Exception: " << e.what() << std::endl;

 }


здесь насколько мне говорит мой английский - подключение возможно только в том случаи
если у меня "белый" ip. И если подключения будет удачным - то ip "белый". Правильно
ли я понял? И какой вариант выбрать? 

Трудность заключается в том, что я не знаю как тестировать. Ведь для этого необходим
белый ip, чтобы попеременно запускать программу и смотреть что да и как работает.
    


Ответы

Ответ 1



Просто отбросит все локальные адреса -> 3. Сообщит Вам - внешний айпи если подключение сотоится. Вот тот, внешний айпи может быть как серым(NAT) так и - белым(BI-NAT). Отличие в том, будет ли Ваша машина "видна" по этому адресу из интернет. А для того чтоб это проверить - надо чтобы удалённое устройство послало пакет на открытый на вашей машине порт. И этот пакет должен успешно дойти. Увы, я не знаю операторов которые предлагают апи для отправки пакетов. Но есть вебсайты которые могут просканировать заданный порт. Разумеется, надо открыть этот порт и ждать на него пакета. К примеру: http://www.yougetsignal.com/tools/open-ports/

Адаптивный drupal 7?

#drupal

                    
Создаю сайт на Drupal 7, хотелось бы его сделать адаптивным, но так как я начинающий
верстальшик, то у меня с эти проблемы.

Есть какие-нибудь ресурсы посвященные этой теме? может статьи или видеоуроки какие-то?
    


Ответы

Ответ 1



Есть видеокурс Responsive Design with Drupal [Lynda.com] На просторах рунета можно скачать его бесплатно - поищите На youtube есть много видео уроков и обзоров - просто введите в поиске на ютубе "drupal responsive"

Ответ 2



Возмите какую-то популярную адаптивную тему подсмотрите как другие сделали, бонусом получите всякие трюки и плюшки которые делали профи, а начинающий может и не знать. Измените ее под себя.

Ответ 3



Очень хорошо документированный фреймворк для построения тем: https://www.drupal.org/project/zen , с помощью него легко можно научится делать хорошие темы, в том числе и адаптивные.

Core Data не сохраняется число

#macos #xcode #binding #coredata #objective_c

                    
Здравствуйте! Создал простенькую программку с поддержкой Core Data, типа Document–Based
app. Имеется текстовое поле, соединённое с arrayController'ом, который в свою очередь
соединён с Entity, у которой есть атрибут "name" типа "string" и атрибут "score" типа
"decimal". Введённая в текстовое поле строка сохраняется без проблем.
Также имеется другое текстовое поле: в него вводится число и после нажатия кнопки
"Go" значение из поля передаётся в метку. Метка соединена абсолютно точно так же как
и первое текстовое поле, но почему-то значение метки не сохраняется.
С чем это связано и как это исправить?
Для наглядности, проект можно скачать отсюда: https://www.dropbox.com/sh/kfp61xu3i4zj3kz/QCnPtlVqtE    


Ответы

Ответ 1



У вас проблема в том, что "запись" в базу не происходит. Изыскания показали, что данные из TextField записываются в базу только после переключения "фокуса" из этой TextField в другое место. А у вас получается, что фокусировки нет совсем. Попробуйте дополнить код "принудительно" записю данных в Базу. Например: - (IBAction)changeScore:(id)sender { [_scoreLabel setDoubleValue:[_scoreField doubleValue]]; id saveObj = [_arrayController selectedObjects][0]; double newDob = [_scoreField doubleValue]; NSNumber * decim = [NSNumber numberWithDouble:newDob]; [saveObj setValue:decim forKey:@"score"]; }

Проблема с ObjectInputStream. (StreamCorruptedException: invalid type code: AC)

#сокеты #java

                    
Вообще изначальная задача - написать игру с двумя игроками, что-то типа точек.
т.е. один игрок (клиент) делает ход, отправляет данные (координаты x и y) на сервер.
Сервер обрабатывает эту информацию и отправляет сообщение с какими-то данными всем
подключенным клиентам. Все это надо реализовать на сокетах.
За основу взяла реализацию чата, но мне удобнее передавать объекты, поэтому использую
ObjectInputStream и ObjectOutputStream.
Написала пример: клиент вводит координаты x y, отправляет на сервер. На сервере хранится
матрица А. Получаем от клиента x,y, присваиваем A[x][y]=1, отправляем всем клиентам
объект класса ServerAnswer (матрица, x,y). Клиент получает и выводит матрицу. 
Для начала запускаю только один клиент. Первый раз все работает, но когда я ввожу
новые координаты на клиенте, они отправляются на сервер, он посылает ответ и на клиенте
при попытке выполнения - 
sa = (ServerAnswer)ois.readObject();

вылетает ошибка 
апр 17, 2014 12:06:45 PM client2.SocketInputThread run
SEVERE: null
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1377)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at client2.SocketInputThread.run(SocketInputThread.java:37)
at java.lang.Thread.run(Thread.java:744)

Подскажите. пожалуйста, что не так в коде.
Код Сервера:
public class Server2 {

public static void main(String[] args) {
   System.out.println("Program starting...");
    try {
        ServerSocket ss = new ServerSocket(3129,0,
                InetAddress.getByName("localhost"));
        System.out.println("Server starting...");
        while(true){
            Socket s = ss.accept(); // ожидание новых клиентов
            SocketThread socketThread = new SocketThread(s);
            Thread t = new Thread(socketThread);
            t.start(); // запуск нового потока для каждого нового клиента
        }
    } catch (IOException ex) {
        Logger.getLogger(Server2.class.getName()).log(Level.SEVERE, null, ex);
    }

   }
 }

Класс SocketThread:
public class SocketThread implements Runnable {

private Socket s = null;

private boolean exit = true;
private int x = -1;
private int y = -1;
private int p = 0;
private int [][]A;
private ArrayList listSocket = null;
private ObjectInputStream ois = null; 
private ObjectOutputStream oos = null;

public SocketThread(Socket s) {
    this.s = s;
}

@Override
public void run() { 
    try {
        System.out.println("User connect...");
        ListSocket.addSocketToList(s); //  добавление текущого сокета с глобальной
список сокетов

        InputStream in = s.getInputStream();
        ois = new ObjectInputStream(in);//получаем от игрока новое ребро

         A = new int [5][5]; 
    for (int i = 0; i<5; i++)
        for (int j = 0; j < 5; j++)
    {
        A[i][j] = 0;
    }

    while (s.isConnected()) {

            Para new_p = (Para)ois.readObject();

             x = new_p.X();
             y = new_p.Y();                 
             p = new_p.P();

             A[x][y] = p;
             System.out.println(x + ";" + y);
             ServerAnswer sa = new ServerAnswer(5, 5);
             sa.SetAns(new_p, A);

            listSocket = ListSocket.getListSocket();
            for (Socket socket : listSocket) { // отсылка сообщения всем сокетам

              oos = new ObjectOutputStream(socket.getOutputStream());
                oos.writeObject(sa);
                oos.flush(); 
            }

        }
        ListSocket.removeSocketWithList(s); // если поток завершается то сокет
клиента удаляется из списка сокетов 
        System.out.println("User disconnect...");
    } catch (IOException ex) {
        try {
            s.close();
        } catch (IOException ex1) {
            Logger.getLogger(SocketThread.class.getName()).log(Level.SEVERE, null, ex1);
        }
        Logger.getLogger(SocketThread.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(SocketThread.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}

Клиент:
public class Client2 {

public static void main(String[] args) {
    try {
        System.out.println("Client starting...");
         Socket s = new Socket("localhost",3129);
        System.out.println("Connect to server...");
        Thread threadIn = new Thread(new SocketInputThread(s));// создание отдельного
потока на считывание даных от сервера
        Thread threadOut = new Thread(new SocketOutputThread(s));// создание 
отдельного потока на ввод даных с клавиатуры
        threadIn.start();
        threadOut.start();
    } catch (UnknownHostException ex) {
        Logger.getLogger(Client2.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Client2.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}

SocketInputThread:
public class SocketInputThread implements Runnable {

private Socket s = null;
private ObjectInputStream ois = null;

public SocketInputThread(Socket s) {
    this.s = s;
}

@Override
public void run() {
    try {
        InputStream in = s.getInputStream();
        ois = new ObjectInputStream(in);

        while(true){
             ServerAnswer sa;

             sa = (ServerAnswer)ois.readObject();
             String str = "";

            for (int i=0; i


Ответы

Ответ 1



На один ObjectOutputStream должен приходиться ровно один ObjectInputStream Поясню: Корректный object stream выглядит так: [stream header], [object], [object], [object],... У вас object stream'ы выглядят так: [stream header], [object], [object], [stream header], [object], ... Stream header записывается каждый раз при создании нового ObjectOutputStream. Ваш invalid type code: AC означает, что ObjectInputStream ожидал прочитать объект, а прочитал хидер начала потока. То есть ошибка тут: for (Socket socket : listSocket) { // отсылка сообщения всем сокетам oos = new ObjectOutputStream(socket.getOutputStream()); Нужно хранить не список сокетов, чтобы каждый раз, проходясь по ним, создавать новые ObjectOutputStream'ы, а хранить список ObjectOutputStream'ов и переиспользовать их.

Как генерировать объекты за экраном с заданным промежутком

#spritekit #xcode #разработка_игр #objective_c #ios7

                    
Приветствую всех! Делаю игру на spritekit с бесконечным уровнем (like Doodle jump)и
возникла проблема:
Не могу понять как генерировать платформы за экраном так, чтобы новые генерировались
только после того, как предыдущая платформа уехала на определенное расстояние?
Вот пример кода для генирации платформ
- (void)addPlatforms
{
    int random = arc4random() % (int)(self.frame.size.width-80)+100;

    // right end platform
    SKSpriteNode *rightEndPlatform = [SKSpriteNode spriteNodeWithImageNamed:@"leftPlatform"];
    rightEndPlatform.size = CGSizeMake(16, 16);
    rightEndPlatform.physicsBody =
    [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(rightEndPlatform.size.width,
rightEndPlatform.size.height - 5)];
    rightEndPlatform.position = CGPointMake(random, 0);

    // left end platform
    SKSpriteNode *leftEndPlatform = [SKSpriteNode spriteNodeWithImageNamed:@"rightPlatform"];
    leftEndPlatform.size = CGSizeMake(16, 16);
    leftEndPlatform.physicsBody =
    [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(leftEndPlatform.size.width,
leftEndPlatform.size.height - 5)];
    leftEndPlatform.position = CGPointMake(rightEndPlatform.position.x - PLATFORM_RANGE,
rightEndPlatform.position.y);

    // left platform
    SKSpriteNode *leftPlatform = [SKSpriteNode spriteNodeWithImageNamed:@"centerPlatform"];
    leftPlatform.size = CGSizeMake(leftEndPlatform.position.x, 16);
    leftPlatform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:leftPlatform.frame.size];
    leftPlatform.position =
    CGPointMake(leftEndPlatform.position.x - leftPlatform.size.width/2,
                leftEndPlatform.position.y);

    // right platform
    SKSpriteNode *rightPlatform = [SKSpriteNode spriteNodeWithImageNamed:@"centerPlatform"];
    rightPlatform.size = CGSizeMake(self.frame.size.width+rightEndPlatform.position.x, 16);
    rightPlatform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rightPlatform.frame.size];
    rightPlatform.position =
    CGPointMake(rightEndPlatform.position.x + rightPlatform.size.width/2,
                rightEndPlatform.position.y);

    // add to the scene
    [self addChild:rightEndPlatform];
    [self addChild:leftEndPlatform];
    [self addChild:leftPlatform];
    [self addChild:rightPlatform];

    // add platforms to array
    [platformArray addObject:rightEndPlatform];
    [platformArray addObject:leftEndPlatform];
    [platformArray addObject:leftPlatform];
    [platformArray addObject:rightPlatform];

    for (int i = 0; i < [platformArray count]; i++)
    {
        SKSpriteNode *sprite = [platformArray objectAtIndex:i];
        sprite.physicsBody.usesPreciseCollisionDetection = YES;
        sprite.physicsBody.dynamic = NO;
        sprite.name = [NSString stringWithFormat:@"beforePlayer"];
    }
}

Генерирую платформу, потом напротив через промежуток другую платформу и достраиваю
от краев экрана до этих платформ линии, получая стенку с проходом.
Далее двигаю созданную конструкцию
-(void)update:(CFTimeInterval)currentTime
{
    for (int i = 0; i < [platformArray count]; i++)
    {
        SKSpriteNode *platform = [platformArray objectAtIndex:i];
        platform.position = CGPointMake(platform.position.x, platform.position.y
+ PLATFORM_SPEED);
        if (platform.position.y > self.frame.size.height+100)
        {
            [platform removeFromParent];
        }
    }
}

а генерация платформ происходит по времени
timer = [NSTimer scheduledTimerWithTimeInterval:TIME_INTERVAL target:self selector:@selector(addPlatforms)
userInfo:nil repeats:YES];

Вот и вопрос, вообще правильно ли я делаю или есть лучше вариант, как генерировать
платформы не по времени а по расстоянию (первая сгенерированная платформа уехала на
100 единиц , тогда генерируем вторую, вторая уехала на 100 единиц- генерируем третью и т.д)
Спасибо за внимание!    


Ответы

Ответ 1



Сразу прошу прощения, не стал вчитываться в код, (как известно, разбирать чужой код это, как лезть кому-то в душу) ). Наиболее изящный, по моему скромному мнению, выход из этой ситуации таков: 1) Остановите движение платформ, временно закомментировав соответствующую часть кода в update 2) На неподвижном экране создайте максимально возможное число платформ (на нужном Вам расстоянии друг от друга). Это легко сделать, с помощью цикла for. 3) Сдвиньте точку генерации первой из платформ на нужное расстояние за экраном. 4) Далее, в методе update начинайте двигать платформы (кстати, доступ к платформе можно получить, присвоив ей имя (если не знаете как, я напишу)) и, при этом, как только платформа пройдет нужное расстояние (то, что между каждой из платформ) за экран, Вам необходимо переместить ее в начальную точку (в ту, в которой происходила генерация первой платформы). При выполнении данного алгоритма у Вас получится непрерывный "поток" платформ, причем без наложений и дополнительной генирации (то макимальное число платформ вы просто перемещаете "по кругу") Надеюсь, у меня получилось донести до Вас мысль об общем построении таких конструкций. Если нужно что-то описать подробней, пишите, не стесняйтесь.

Как сделать сразу мобильное меню bootstrap

#jquery #html #css #bootstrap

                    
Как сделать сразу мобильное меню, если пунктов слишком много по ширине, чтобы они
не выстраивались в два этажа.
Вот картинка: 
    


Ответы

Ответ 1



просто хардкод! это если нужно постоянное отображение дропменю

Ответ 2



Если работать с bootstrap на уровне less, то в файле variables.less настраивается переменная @grid-float-breakpoint. Customize and download находим эту переменную, задаём значение(например 1280px) меньше которого меню коллапсирует. Скачиваем, пользуемся.

JS PING серверов

#javascript

                    
Доброго всем
Пол дня мучаюсь с решением одного вопроса.
Есть список пулов для майнинга, надо определить пинг до серверов. Пинг должен быть
с IP пользователя до IP сервера, т.е. с моего сервера не пойдет, поэтому пришел к JS.
После долгих поисков соорудил такую констукцию:
      to_host ='http://5.9.6.228';
  timeStart = new Date().getTime();
  $.get(to_host).error(function (){
        ping_time = new Date().getTime() - timeStart;
        ping_time_sec = ping_time;
        document.write(''+ num +' Ping '+ to_host +' OK. Time '+ ping_time_sec +
' msec.
' ); }) Скрипт в консоли вываливает ошибку: XMLHttpRequest cannot load http://5.9.6.228/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. Но при этом получает ответ от сервера и я могу измерить это время. Можно ли считать полученное время временем PINGа в привычном понимании? Если совсем нет, подскажите решение, задолбался искать. Спасибо)


Ответы

Ответ 1



На SO предлагают использовать нативный Image для проверки связи. Кусок кода, из которого понятна идея: function Pinger_ping(ip, callback) { if(!this.inUse) { this.inUse = true; this.callback = callback this.ip = ip; var _that = this; this.img = new Image(); this.img.onload = function() {_that.good();}; this.img.onerror = function() {_that.good();}; this.start = new Date().getTime(); this.img.src = "http://" + ip; this.timer = setTimeout(function() { _that.bad();}, 1500); } } Часть времени в первый запрос уйдет на разрешение имени в ip, поэтому для имен лучше измерять повторный запрос, когда ip закэширован. fiddle

Как правильно использовать INotifyPropertyChanged для извещения “родителя” о изменение экземпляра?

#c_sharp

                    
Проблема такая: необходимо изменять значения в коллекции при изменении хотя бы одного
из полей в объекте. Если ближе к самой идеи кода, то при изменении длины одного из
участков трубы, нужно пересчитать другие.
Архитектура в коде такая: родительский абстрактный класс public abstract class AbstractTube,
от которого наследуется класс public class TubingStage : AbstractTube, и создается
лист из труб 
 public class CollectionTubingStage: ObservableCollection < TubingStage > ,
 INotifyPropertyChanged {}

 //Есть обработчик события и само событие в классе TubingStage:

 public event PropertyChangedEventHandler PropertyChanged;
 private void NotifyPropertyChanged(String info) {
    if (PropertyChanged != null) {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
 }

 // И код свойства в том же классе

 public override double Lenght {
    get {
        return TLenght;
    }
    set {
        TLenght = value;
        NeedAutoAlign = true;
        NotifyPropertyChanged("Lenght of stage has been changed!");
    }
 }

Как мне правильно воспользоваться INotifyPropertyChanged для этого? Не понятно как
из экземпляра коллекции получить доступ к самой коллекции, для ее модификации.    


Ответы

Ответ 1



Не-не, это не дело элемента коллекции, менять саму коллекцию. Делайте так: Участок трубы реализует INotifyPropertyChanged Класс Tube содержит приватно коллекцию участков. Он же занимается добавлением и удалением этих самых участков. ObservableCollection вообще не нужен, труба знает, когда в ней добавляются/уходят куски. При добавлении куска труба подписывается на его PropertyChanged, при удалении отписывается На PropertyChanged нужно пересчитать общую длину. Так же как и на добавлении и удалении куска. Если сильно хочется, можно закешировать длины кусков, чтобы не опрашивать их повторно при изменении лишь одного куска. А можно и не делать, оптимизация не особо большая, больше мороки, чем пользы.

Обрезание блоков на Ipad

#ipad #html #ios #css

                    
При просмотре кода на Ipad'e блоки обрезаны с правой стороны, хотя ширина 100%. В
чем проблема?
http://rghost.ru/55715542    


Ответы

Ответ 1



- это должно помочь width - установите свою ширину По умолчанию ширина окна просмотра на iPhone устанавливается равной 980px. Но ваш дизайн может не соответствовать данному диапазону. Значение может быть для шаблона слишком большим или маленьким. посмотрите здесь

Модуль angularJS

#javascript #angularjs

                    
Создаю модуль AngularJS в файле app.js 
var todoApp = angular.module("todoApp", []);

Ошибка: 

Uncaught ReferenceError: angular is not defined
    


Ответы

Ответ 1



Как уже отметили в комментариях, похоже на то, что файл app.js подключен раньше чем angular.js. В index.html должно подключение скриптов выглядеть примерно так: