Плагин jQuery Templates и постоянство данных - PullRequest
2 голосов
/ 22 июля 2011

Я не совсем уверен, что происходит, но все признаки указывают мне в этом направлении .. У меня есть этот фрагмент кода (работает):

some_data = {"item":"value"};
$.get("some_template.php", function(template)
{
    $.tmpl(template, some_data).appendTo("#some_div");

    do_something_else();
});
//evil line

и #some_div заполняется ... но, если на "злой линии" я поставлю это:

some_data = {};

#some_div показывает пустой. Есть ли какая-то постоянность данных в плагине шаблона? Я должен не связываться с some_data после использования?

2011-07-22 Важно! Из того, что я узнал, объект json и шаблон связаны, поэтому, если я сделаю это на «злой линии»:

some_data = {"item":"new value"};

шаблон меняет свое содержимое даже после его рендеринга. Кто-нибудь знает, есть ли способ предотвратить это?

РЕШЕНИЕ !: см. Мой комментарий к ответу Брэндона Буна Пример:

some_data = {"item":"value"};
$.get("some_template.php", function(template)
{
    $.tmpl(template, some_data).appendTo("#some_div");

    some_data = {}; //evil line

    do_something_else();
});

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Похоже, function(template){...} - это функция асинхронного обратного вызова. Это означает, что ваша «злая линия», скорее всего, выполнится до того, как будет достигнута внутренняя часть этой функции. Так что к тому времени, когда вы используете some_data внутри функции, она уже будет пустой.

Рефакторинг к:

http://jsfiddle.net/dq9es/

Исправит проблему

0 голосов
/ 22 июля 2011

Это потому, что когда вы запускаете

$.tmpl(template, {});

, он циклически просматривает шаблон для каждой части данных, которую вы передаете, и соответственно заполняет div.Если вы не передадите ему какие-либо данные, он не будет проходить через шаблон и выводить html.

Если вы просто пытаетесь загрузить статический html, я не думаю, что шаблоны - это решение.

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