Включение компонента Sencha в XTemplate

#sencha-touch #extjs

#sencha-touch #extjs

Вопрос:

Я разрабатываю приложение Sencha Touch, в котором я делаю много Ext.extend и создаю свои собственные пользовательские компоненты и классы. Я относительно новичок в области сенсорного управления Sencha, и у меня возникла небольшая проблема при попытке использовать один из моих компонентов внутри Ext.XTemplate . Вот концепция того, что я пытаюсь сделать в некотором коде:

 MyObj = Ext.extend(Ext.Panel, {
    cls: 'myClass',
    layout: 'card',
    scroll: 'vertical',
    monitorOrientation: true,
    config: myConfigObject.localObjectType,
    loc: 'en_US',
    initComponent: function() {
        // some random init code here…
        // Including:

        var tpl = new Ext.XTemplate(
            '<tpl for=".">',
            '<tpl if="Available === true"><div class="itemAvail"></tpl>',
            '<tpl if="Available !== true"><div class="itemNotAvail"></tpl>',
            '<div class="formText">',
            // INSERT MY VIDEO COMPONENT HERE…
            '</div>',
            '</div>',
            '</tpl>',
            { compiled : true }
        );
    },
    // Object definition continues, but I don't think it's germane to this discussion…
});

Ext.reg('videoList', MyApp.views.VideoList);
  

И теперь полукод для моего видеокомпонента, который мне нужен, включен выше:

 MyVideoComponent = Ext.extend(Ext.Panel, {
    programID: null,
    chapterID: null,
    video: null,
    videoPlayer: null,

    initComponent: function() {
        var progID = this.programID;
        var chapID = this.chapterID;

        // Set up the video object based on progID and chapID

        this.videoPlayer = new Ext.Video({
            id: "videoPlayer",
            url: video.URL,
            posterURL: video.posterURL,
            fullscreen: true,
            autoResume: true,
            // configure listeners for play/end/error
        });

        // Call superclass.initComponent()
    },

    // Create listener callbacks for onPlay, onEnded, onError…

});

Ext.reg('videoComponent', MyApp.components.VideoComponent);
  

Есть ли у кого-нибудь идеи о том, как я могу этого добиться?

Спасибо!

Комментарии:

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

Ответ №1:

[Sencha Person] В настоящее время наш язык шаблонов немного ограничен. Как только вы переходите в HTML для средства визуализации элементов, вы не можете вернуться к уровню компонентов. Вы можете достичь желаемого результата, расширив panel как пользовательский компонент, который выполняет итерации по списку данных, создает и добавляет элементы в DOM.

Мы хотели бы сделать наши шаблоны намного более гибкими, чтобы вы могли легче выполнять то, что хотите, но, по крайней мере, в Touch 1.0 это не является базовой задачей.

Комментарии:

1. Мы никогда не могли заставить это работать так, как мы хотели. Вместо этого нам пришлось добавить промежуточную страницу с изображением с надписью «Нажмите, чтобы воспроизвести», которая затем загружает видео и передает его на собственный видеоплеер устройства.

Ответ №2:

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

Я бы попытался разбить содержимое страницы на несколько компонентов и упорядочить их (включая видеокомпонент) с помощью системы компоновки, предоставляемой Sencha Touch.

При использовании Extjs / Sencha Touch «правильный» способ представления представлений — не записывать их в html, а создавать их с использованием компонентов в библиотеке, насколько это возможно.

Комментарии:

1. Разделение содержимого казалось сложной задачей, пока я не смог сделать шаг назад и взглянуть на общую картину Sencha Touch. Ваш комментарий о разделении его на несколько компонентов имеет смысл, это самая мощная функция ST! Приветствия..