fix: render component via Lampa.Layer (official iptv pattern), create() returns render()
This commit is contained in:
1 parent
23583d9c61
commit
38632479c9
1 file changed
+36
-22
@@ -21,11 +21,15 @@
|
||||
}
|
||||
|
||||
// ---------- Компонент: список фильмов ----------
|
||||
// Паттерн из официального iptv-плагина Lampa:
|
||||
// create() возвращает this.render(); render() строит html и выводит через Lampa.Layer.
|
||||
Lampa.Component.add(PLUGIN.name, {
|
||||
create: function () {
|
||||
return this.render();
|
||||
},
|
||||
render: function () {
|
||||
var comp = this;
|
||||
var content = comp.activity.render().find('.main__content');
|
||||
content.html('<div class="mymovies"><div class="movies-grid"></div></div>');
|
||||
var html = $('<div class="mymovies"><div class="movies-grid"></div></div>');
|
||||
comp.activity.loader(true);
|
||||
|
||||
fetch(base() + 'movies/catalog.json')
|
||||
@@ -37,14 +41,19 @@
|
||||
comp.activity.loader(false);
|
||||
var movies = (data && data.movies) || [];
|
||||
console.log('[mymovies] loaded', movies.length, 'films');
|
||||
renderMovies(content.find('.movies-grid'), movies);
|
||||
renderMovies(html.find('.movies-grid'), movies);
|
||||
Lampa.Layer.update(html);
|
||||
Lampa.Layer.visible(html);
|
||||
})
|
||||
.catch(function (err) {
|
||||
comp.activity.loader(false);
|
||||
console.error('[mymovies] catalog error', err);
|
||||
content.find('.movies-grid').html('<div class="mymovies-empty">Ошибка загрузки каталога</div>');
|
||||
Lampa.Noty.show('Не удалось загрузить каталог');
|
||||
html.find('.movies-grid').html('<div class="mymovies-empty">Ошибка загрузки каталога</div>');
|
||||
Lampa.Layer.update(html);
|
||||
Lampa.Layer.visible(html);
|
||||
});
|
||||
|
||||
return html;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -70,27 +79,32 @@
|
||||
var selected = null;
|
||||
Lampa.Component.add(PLUGIN.name + '_detail', {
|
||||
create: function () {
|
||||
return this.render();
|
||||
},
|
||||
render: function () {
|
||||
var comp = this;
|
||||
var m = selected;
|
||||
if (!m) { Lampa.Activity.back(); return; }
|
||||
var content = comp.activity.render().find('.main__content');
|
||||
if (!m) { Lampa.Activity.back(); return $('<div></div>'); }
|
||||
|
||||
var html = '<div class="mymovies-detail">';
|
||||
html += '<div class="detail-head">';
|
||||
html += '<img class="detail-poster" src="' + resolve(m.poster || m.cover) + '">';
|
||||
html += '<div class="detail-info"><h1>' + esc(m.title) + '</h1>';
|
||||
if (m.original_title) html += '<div class="detail-orig">' + esc(m.original_title) + '</div>';
|
||||
if (m.year) html += '<div class="detail-year">' + m.year + '</div>';
|
||||
if (m.genre && m.genre.length) html += '<div class="detail-genre">' + m.genre.join(', ') + '</div>';
|
||||
if (m.rating) html += '<div class="detail-rating">★ ' + m.rating + '</div>';
|
||||
if (m.description) html += '<div class="detail-desc">' + esc(m.description) + '</div>';
|
||||
html += '</div></div>';
|
||||
html += '<div class="detail-actions"><div class="btn selector" data-act="play">Смотреть</div></div>';
|
||||
html += '</div>';
|
||||
var html = $('<div class="mymovies-detail">');
|
||||
html.append('<div class="detail-head">');
|
||||
html.append('<img class="detail-poster" src="' + resolve(m.poster || m.cover) + '">');
|
||||
var info = $('<div class="detail-info">').append($('<h1>').text(m.title));
|
||||
if (m.original_title) info.append($('<div class="detail-orig">').text(m.original_title));
|
||||
if (m.year) info.append($('<div class="detail-year">').text(m.year));
|
||||
if (m.genre && m.genre.length) info.append($('<div class="detail-genre">').text(m.genre.join(', ')));
|
||||
if (m.rating) info.append($('<div class="detail-rating">').text('★ ' + m.rating));
|
||||
if (m.description) info.append($('<div class="detail-desc">').text(m.description));
|
||||
html.append(info);
|
||||
html.append('</div>');
|
||||
html.append($('<div class="detail-actions">').append(
|
||||
$('<div class="btn selector" data-act="play">').text('Смотреть')
|
||||
));
|
||||
|
||||
content.html(html);
|
||||
content.find('[data-act="play"]').on('hover:enter', function () { play(m); });
|
||||
Lampa.Selector.update();
|
||||
html.find('[data-act="play"]').on('hover:enter', function () { play(m); });
|
||||
Lampa.Layer.update(html);
|
||||
Lampa.Layer.visible(html);
|
||||
return html;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user