JsViews не удаляет теги script после обновления изменения с помощью наблюдаемого API в массиве

Недавно я работал с JsViews. Но у меня возникла проблема с $.observable(array).refresh()

Скажем так, если у меня есть массив объектов

countries = [
  {country : 'India'}, 
  {country : 'USA'},
  {country : 'Africa'}
]

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

<html>
  <body>
    <script type="jsv#1"></script>
    <div class="country">India</div>
    <script type="jsv/1"></script>
    <script type="jsv#2"></script>
    <div class="country">USA</div>
    <script type="jsv/2"></script>
    <script type="jsv#3"></script>
    <div class="country">Africa</div>
    <script type="jsv/3"></script>
  </body>
<html>

Но когда я получаю новый элемент в массиве и нажимаю его наверх. У меня есть следующий массив.

countries = [
  {country : 'Canada'},
  {country : 'India'}, 
  {country : 'USA'},
  {country : 'Africa'}
]

И тогда я применяю

$.observable(countries).refresh(countries);

Что я получаю в структуре html:

<html>
  <body>
    <script type="jsv#1"></script>
    <script type="jsv/1"></script>
    <script type="jsv#2"></script>
    <script type="jsv/2"></script>
    <script type="jsv#3"></script>
    <script type="jsv/3"></script>
    <script type="jsv#4"></script>
    <div class="country">Canada</div>
    <script type="jsv/4"></script>
    <script type="jsv#5"></script>
    <div class="country">India</div>
    <script type="jsv/5"></script>
    <script type="jsv#6"></script>
    <div class="country">USA</div>
    <script type="jsv/6"></script>
    <script type="jsv#7"></script>
    <div class="country">Africa</div>
    <script type="jsv/7"></script>
  </body>
<html>

Здесь теги «jsv#1», «jsv#2», «jsv#3» и соответствующие им закрывающие теги не удаляются.

Я обнаружил эту проблему с JsViews V1.0, выпущенным в 2012 году.

Это правильное поведение или я должен использовать другой подход к вставке элементов.

Спасибо.


person Rama Krishna    schedule 11.08.2016    source источник


Ответы (1)


Это не правильное поведение.

Версия 1.0 еще не выпущена, поэтому я не знаю, какую версию вы используете.

Можете ли вы переключиться на последнюю версию и повторить попытку: http://www.jsviews.com/#download.

Вы не должны устанавливать страны в новый массив, а затем вызывать refresh() в новом массиве. Скорее вы должны сделать:

var countries = [
  {country : 'India'}, 
  {country : 'USA'},
  {country : 'Africa'}
];

tmpl.link("#result", countries);

$.observable(countries).refresh([
  {country : 'Canada'},
  {country : 'India'}, 
  {country : 'USA'},
  {country : 'Africa'}
]);

См. http://www.jsviews.com/#refresh.

Но для вставки лучше использовать insert(). См. http://www.jsviews.com/#insert.

person BorisMoore    schedule 11.08.2016
comment
Извините за ошибку. Я использовал v1.0PRE. Это было то, что я мог получить из файла. - person Rama Krishna; 12.08.2016
comment
Я использую последнюю версию (0.9.82) и испытываю ту же проблему, используя как #refresh, так и #insert. Было ли это когда-нибудь решено? - person sdellis; 09.11.2016
comment
Он должен работать правильно. У вас будет <script type="jsv#1_"></script><script type="jsv#5_"></script> <div class="country">Canada</div> <script type="jsv/5_"></script>...<script type="jsv#4_"></script> <div class="country">Africa</div> <script type="jsv/4_"></script><script type="jsv/1_"> или аналогичный - person BorisMoore; 10.11.2016
comment
@BorisMoore Мне любопытно узнать причину добавления большого количества тегов script в DOM между нашим HTML. Не могли бы вы поделиться некоторыми мыслями или ссылками, если таковые имеются? - person agpt; 05.03.2018
comment
@agpt: связывание данных JsViews означает, что наблюдаемые изменения связанных данных автоматически запускают динамические обновления отображаемого HTML. Для этого метод JsViews link() включает маркеры метаданных в отображаемый HTML, которые затем используются в качестве локаторов, чтобы гарантировать, что содержимое обновляется в правильных местах в HTML. Метаданные никоим образом не влияют на визуальный рендеринг и состоят в основном из data-jsv атрибутов некоторых элементов HTML, а также из некоторых вставленных тегов сценария типа: jsv..., когда в текстовом содержимом необходимы локаторы. - person BorisMoore; 06.03.2018