Доступ к глобальной переменной javascript внутри шаблона jsrender и ее обновление

Я пытаюсь обновить глобальную переменную javascript со значением из шаблона jsrender. Как я могу это выполнить...

я создал скрипт http://jsfiddle.net/4RH7n/8/

мне нужно, чтобы последнее название фильма было в этой переменной javascript..


person quickLearner    schedule 11.09.2012    source источник
comment
Movies — это массив, который вы можете использовать, videos.push({ name: any, releaseYear: any})   -  person Rupesh Patel    schedule 05.10.2012


Ответы (2)


Пользовательские теги и помощники могут быть легко зарегистрированы для доступа или изменения глобальных переменных. Пример здесь (код здесь), который показывает оба пути, и иллюстрирует настройку и получение глобальных переменных из шаблона. Вспомогательные/пользовательские теги лучше, чем использование {{* ...}} (поскольку таким образом вы лучше разделяете код и разметку), но если вы используете синтаксис {{*, вам нужно установить allowCode=true. (см. этот пример).

Вышеупомянутые подходы — это способы использования вашего собственного расширения для доступа к ЛЮБЫМ файлам global. Однако в большинстве сценариев у вас, вероятно, есть только определенные глобальные переменные, к которым вы хотите получить доступ. В этом случае действительно легко передать глобальные параметры в качестве параметров вызова .render() (или вызова .link(), если вы используете JsViews) следующим образом:

...render(myData, { foo: myFooGlobal, bar: myBarGlobal });

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

... {{:~foo}} ... {{for ~bar}} ... {{/for}} ...

Если вы хотите иметь доступ к этим глобальным переменным из всех ваших шаблонов (или для всех вызовов определенного шаблона), вы можете вместо этого зарегистрировать их как глобальные (или специфичные для шаблона) вспомогательные параметры/параметры шаблона, и тогда вам не нужно передать их с вызовом рендеринга/ссылки.

Например, чтобы зарегистрировать их глобально, для всех шаблонов:

$.views.helpers({
    foo: myFooGlobal,
    bar: myBarGlobal 
});

Затем вы получаете к ним доступ точно так же, как описано выше, используя ~foo (или foo() для функции).

Примеры всех этих подходов вы найдете на GitHub.


ОБНОВЛЕНИЕ:

Помимо документации и примеров, упомянутых выше, на http://www.jsviews.com и, в частности, здесь и здесь.

person BorisMoore    schedule 12.09.2012
comment
Привет, Борис, рад, что ты увидел этот вопрос... Я только что создал скрипт jsfiddle.net/4RH7n/21 почему-то он работает не так, как на обычном веб-сайте. но, глядя на эту скрипку, вы увидите, что я пытаюсь сделать... - person quickLearner; 13.09.2012
comment
jsfiddle.net/MDvZx/1 показывает один из способов подключения события click. Вы также можете использовать JsViews как способ упростить достижение интерактивности... - person BorisMoore; 15.09.2012
comment
Спасибо, Борис, воспользовался вашими советами, все заработало... Большое спасибо за ценный совет. Я ценю ваше время и усилия. - person quickLearner; 17.09.2012
comment
Я только что отредактировал свой ответ выше, добавив дополнительную информацию для разных сценариев. - person BorisMoore; 18.09.2012

Не совсем уверен, что вы спрашиваете. Данные не будут поступать из шаблона, у вас уже есть данные в этом объекте. Просто используйте его напрямую:

window.abcfx = function() {
  alert(movies[movies.length-1].name);
}

скрипка

person Austin Greco    schedule 11.09.2012
comment
извините, может быть, я недостаточно ясен .. json динамически обновляется, он не постоянный. также в зависимости от нескольких условий я могу загрузить весь json или частичные элементы. вот почему я хотел обновить глобальную переменную js из шаблона jsrender. Можно ли это осуществить? - person quickLearner; 11.09.2012
comment
Извините, просто не понимаю, зачем вам что-то делать с шаблоном. Шаблон является клиентской стороной, поэтому у вас будут данные json, доступные где-то, чтобы получить нужные вам значения. - person Austin Greco; 12.09.2012
comment
Хорошо, вот текущий сценарий. У меня есть два json. С помощью основного json я загружаю все детали в элементы формы. Один элемент формы представляет собой раскрывающийся список, который мне нужно заполнить всеми значениями (эти значения поступают из другого json) и выбрать значение в текущем json. - person quickLearner; 13.09.2012