Можно ли создать элемент на лету с помощью jQuery Mobile? - PullRequest
6 голосов
/ 05 августа 2011

У меня есть приложение, созданное с использованием jQuery (и с использованием различных инструментов jQuery-UI).

По какой-то причине мне пришлось портировать его на смартфон / планшет, и я решил использовать для этого jQuery Mobile (чтобы минимизировать количество изменений).

В моем ванильном приложении я на лету создал некоторые элементы страницы в зависимости от взаимодействия с пользователем.

Например, можно создать слайдервот так (p - это объект с кучей параметров):

function createSlider(p){
     return $("<div/>",{
              "id":p.id,
              "class":p.divClass,
           }).slider({
              "orientation": p.align,
              "min":p.constraint.min,
              "max":p.constraint.max,
              "step":p.step,
              "value":p.curVal,
              "animate":"normal"
              /*and some event handling here, but it doesn't matter*/
           });

}

И он создаст красивый слайдер.Теперь это выглядит так:

function createSlider(p){
    return $("<range/>",{
           "id":p.id,
           "class":p.divClass,
           "min":p.constraint.min,
           "max":p.constraint.max,
           "step":p.step,
           "value":p.curVal,
    });   
}

Но так как он создается на лету, все, что делает jQuery Mobile при загрузке страницы, не выполняется на нем.

Есть ли способзаставить эту инициализацию без записи ползунка в html?

Спасибо.

EDIT : я нашел в doc , что это может быть достигнутоиспользование container.trigger("create"); Однако это пока не работает.

EDIT2 : Хорошо, создание было решением.

Ответы [ 2 ]

4 голосов
/ 08 августа 2011

Согласно документации (см. Правку в вопросе), использование trigger("create") для содержащего элемента работает.

И чтобы это работало, вам также нужно помнить, что диапазон - это тип ввода, а не тег ...

Рабочий раствор:

function createSlider(){
    return $("<input/>",{
           "type":"range",
           "id":"sl",
           "min":0,
           "max":15,
           "step":1,
           "value":1,
    });   
}

function appendSlider(){
    $("#yourdiv").append(createSlider()).trigger("create");
}

Как примечание, в документации для jQuery mobile отсутствует опция поиска.

0 голосов
/ 05 августа 2011

Попробуйте позвонить .page() на контейнер, в который добавляется контент. Кроме того, добавление .page() к содержимому, которое вы возвращаете, также может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...