Marionette js Просмотр данных анализа из html и рендеринг

у меня есть макет

<div id="region">
<h1>Header</h1>
<ul class="items">
    <li>Number = 1</li>
    <li>Number = 2</li>
    <li>Number = 3</li>
</ul>
</div>

Этот рендер из бэкенда Как взять данные из разметки и рендерить только новый ItemView и удалить те, которых нет в json файле

    class Collections extends Backbone.Collection
          initialize: ->
            console.log 'Collections init'


    class NowListning extends Marionette.CompositeView
          template :  _.template("<h1>Header</h1> <ul class='items'></ul>")
          itemView: NowListningItem
          itemViewContainer: '.items'
          initialize : ->
            console.log 'init:: View: Local -> NowListning'



   class NowListningItem extends Marionette.ItemView
          template :  _.template("<%= text %>")
          tagName: "li"     

   domData = []
        $('items li').each ->
          item:
            text: $(this).text()
          domData.push(item)

   collections = new Collections(domData)
        nowListning = new NowListning
        collections.fetch
          url: 'items.json'

Если я создаю регион и вызываю метод Show, он меняет CompositeView, но я хочу обновить только список без заголовка

json 
[
 {
   "text": "Number = 3"
 },
 {
   "text": "Number = 4"
 }
]

И я хочу увидеть

<div id="region">
    <h1>Header</h1>
    <ul class="items">
        <li>Number = 3</li>
        <li>Number = 4</li>
    </ul>
    </div>

person Dilan Mckey    schedule 02.04.2014    source источник
comment
json-файл? не могли бы вы добавить его src?   -  person Evgeniy    schedule 03.04.2014
comment
@Evgeniy Т.е у меня уже отрисован блок с бека и я не хочу его перерисовывать, а просто обновить данные коллекции и удалить старые itemView и добавить новые   -  person Dilan Mckey    schedule 03.04.2014
comment
Аха, понял - на всякий случай поясню - надо запихнуть коллекцию в срок - тогда на ините вьюхи ее можно легко спарсить. Когда наступит время выборки, коллекцию можно сбросить. Тема наиболее отрендерится обновленная коллекция.   -  person Evgeniy    schedule 03.04.2014


Ответы (1)


Чтобы получить данные из разметки, вы можете парсить html с помощью Jquery, но я не рекомендую этого делать. Лучше всего добавить атрибут данных в html-код, который вы получаете с сервера:

Например :

<div id="region" data-collection='[{ "id" : 1, "text": "Number = 1" }, { "id" : 2, "text": "Number = 2" }, { "id" : 3, "text": "Number = 3" }]'>
    <h1>Header</h1>
    <ul class="items">
        <li>Number = 1</li>
        <li>Number = 2</li>
        <li>Number = 3</li>
    </ul>
</div>

Поэтому, когда вы визуализируете collectionView, вы можете легко получить начальную коллекцию. (например, при инициализации).

Позже вызываемая вами коллекция .fetch() будет объединена с результатом json. .fetch() имеет несколько вариантов поведения слияния - вы можете выбрать подходящее для вас, в этом случае я думаю, что "сброс"

Вы также можете проверить Статья Дерика о похожей проблеме.

person Evgeniy    schedule 03.04.2014