2014-10-25 3 views
0

У меня есть шаблон с divs #entries и #movies В моем #entries div Я покажу модели своей коллекции фильмов. В моем #movies div я показываю результаты поискового запроса. (Именование элементов довольно плохо, я согласен).Можно ли только удалить часть шаблона

В представлении, которое делает шаблон у меня есть следующие события,

events: -> 
    "click li": "addEntry" 
    "click .remove": "destroyEntry" 

    addEntry: (e) -> 
    movie_title = $(e.target).text() 
    @collection.create title: movie_title 

    appendEntry: (entry) -> 
    view = new Movieseat.Views.Entry(model: entry) 
    $('#entries').append(view.render().el) 

    destroyEntry: (e) -> 
    thisid = @$(e.currentTarget).closest('div').data('id') 
    @collection.get(thisid).destroy() 

Элемент литий визуализируется в #movies дел. Таким образом, я могу щелкнуть результаты из другого представления и добавить их в другую коллекцию. Это работает, но есть проблема.

В той же точки зрения у меня есть это,

initialize: -> 
    @collection.on('change', @render, this) 
    @collection.on('add', @appendEntry, this) 
    @collection.on('destroy', @render, this) 
    return 

Проблема заключается в том, что, когда изменения коллекции (например, при добавлении или удалении фильма из него) он повторно выводит шаблон. Это означает, что он перезагружает #entries и #movies div. Но теперь он просто отображает пустой #movies div (без коллекции поиска).

Так что мне было интересно, можно ли отображать только часть шаблона. В этом случае я хотел бы только перезагрузить #entries div и просто оставить только #movies div.

ответ

1

вы можете попробовать это:

@collection.on('change', @renderEntries, this) 

renderEntries: (entry) -> 
    $('#entries').html(render('entries', { entries: yourEntriesCollection.toJSON() })) 

//some common.js file 

function render(template_name, data) 
{ 
    //here create logic to render specified template by name with data. 
    // see example here: http://stackoverflow.com/questions/8366733/external-template-in-underscore 
    return html; 
} 

вы должны создать шаблон для записей, которые можно визуализировать отдельно.

+0

Так вы говорите, когда изменения коллекции выполняют функцию renderEntries. Функция renderEntries обновляет html раздела '# entries' с содержимым из коллекции. Использует ли «render» часть в '$ ('# entries'). Html (render' ссылается на' function render (имя_файла, данные) '? –

+0

yes, функция render - это просто некоторые утилиты, которые вы можете создать, чтобы использовать их в любом месте ваше приложение. – aleha

+0

Хм. У меня возникли проблемы с пониманием '$ ('# entries'). html (render ('entries', {entries: yourEntriesCollection.toJSON()}))' Я попробовал это с '$ ('# entries ') .html (' hello) ', который заменяет текущий HTML на' hello'. Но я не понимаю, как подключить его к шаблону, который я использую для вывода моих данных. У меня есть шаблон в другой папке. Я не понимаю, что '{entries: yourEntriesCollection.toJSON()}' делает, или почему, если мне это понадобится. –

Смежные вопросы