Изменение вида - Сенча

Я хочу изменить вид на itemtap, и я это сделал

itemtap : function(list, index, target, record, event) {
 var id = index + 1;
if(id == '1'){
Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true);  
Ext.Viewport.add([

 { xtype: 'publishedword' }

 ]);  
}

теперь я пытаюсь применить его в представлении, как показано на рисунке ниже, где 1-е представление содержит меню с заполненным элементом, и теперь при нажатии на этот элемент я хочу открыть новое представление на домашней странице, заменив представление домашней страницы. Как я могу достичь этого?

Контейнер для рисунка ниже:

 Ext.define('myprj.view.Main', {
 extend: 'Ext.Container',
 alias: 'widget.mainmenuview',

 config: {

 width: 710,
 margin: '10px auto 0',
 layout: {
 type: 'hbox'
 },
defaults: {
  flex: 1
},
activeItem: 1,
items: [{
flex: 1,
xtype: 'container',
cls:'wholeMenuWrap',
margin: '65px 0 0 0',
width: 170,
layout: 'vbox', 

  items: [
  {
    xtype:'menupage',
    cls: 'menuPage',
    docked: 'left',    
  },
   {
    xtype:'homepage',
    cls: 'homePage', 
    //docked: 'center',
  },

  {
    xtype:'categorypage',
    cls: 'categoryPage',
    docked: 'right',
  },]
}]
}
});

Теперь в приведенном выше коде я хочу только изменить домашнюю страницу и отобразить другое представление по отношению к itemtap. ![firstscreen][1] И когда я использую приведенный выше код для этой ситуации, весь вид изменяется, но я просто хочу изменить 2-й вид по отношению к itemTap. Спасибо.

ОТРЕДАКТИРОВАНО

  if(id == '1'){
console.log("Value of Click--"+id);
var publishedword = { xtype: 'publishedword' }; 

   // I am assuming active item is container, here i am getting Container object
   var outerContainer = Ext.Viewport.getActiveItem(1);

   // removing the second item (index start with 0) 
   outerContainer.down('panel').removeAt(1);

   // replacing second item into publishedword
   outerContainer.down('panel').insert(1, publishedword);
   outerContainer.getAt(1).setActiveItem(publishedword);
  }

После этого кода я могу загрузить опубликованное слово, как показано на рисунке ниже! [result2][2] Теперь я хочу, чтобы мои слова находились между меню и категориями. На приведенном выше рисунке вы можете видеть, что домашняя страница не уничтожена, она возвращается после опубликованного слова.


person surhidamatya    schedule 31.07.2013    source источник
comment
что значит весь вид? или каковы компоненты всего этого представления?   -  person Viswa    schedule 31.07.2013
comment
весь вид означает внешний прямоугольник.   -  person surhidamatya    schedule 31.07.2013
comment
Хорошо, этот внешний прямоугольник - это панель или какой тип компонента?   -  person Viswa    schedule 31.07.2013
comment
Вы хотите заменить второй вид на опубликованный вид?   -  person Viswa    schedule 31.07.2013
comment
домашняя страница находится ниже меню, но я хочу заменить второй вид (опубликованные слова) на домашнюю страницу.   -  person surhidamatya    schedule 31.07.2013
comment
@Viswa Можете ли вы проверить эту ссылку stackoverflow .com/questions/17987054/. Спасибо за помощь   -  person surhidamatya    schedule 02.08.2013
comment
я ответил, основываясь на том, что я понял.. это хорошо.. вы решили свою проблему.   -  person Viswa    schedule 07.08.2013
comment
Спасибо за помощь. Ваша помощь позволила решить проблему   -  person surhidamatya    schedule 07.08.2013


Ответы (2)


Это то, что вы делаете, но есть вещи, которые вам нужно понять

    itemtap : function(list, index, target, record, event) {
     var id = index + 1;
     if(id == '1'){

        //This line will remove the whole container, but that's not you want
        Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true); 

        //This line will add publishedword conponent into viewport not carousel
        Ext.Viewport.add({ xtype: 'publishedword' });  
     }
   }

Что вам нужно сделать, это

    itemtap : function(list, index, target, record, event) {
     var id = index + 1;
     if(id == '1'){
       var publishedword = { xtype: 'publishedword' }; 

       // I am assuming active item is container, here i am getting Container object
       var outerContainer = Ext.Viewport.getActiveItem();

       // removing the second item (index start with 0) 
       outerContainer.down('carousel').removeAt(1);

       // replacing second item into publishedword
       outerContainer.down('carousel').insert(1, publishedword);
     }
   }
person Viswa    schedule 31.07.2013
comment
ваш способ работает, но я не могу установить домашнюю страницу в центре - person surhidamatya; 31.07.2013
comment
что вы имеете в виду в центре? - person Viswa; 31.07.2013
comment
Можете ли вы сказать мне, в каком порядке отображаются эти представления? - person Viswa; 31.07.2013
comment
меню-›домашняя страница-›категории и домашняя страница всегда в центре только для просмотра изменений в itemTap. И я сначала вставил неправильный код, это панель, а не карусель, вы можете взглянуть на мой отредактированный код. Спасибо. - person surhidamatya; 31.07.2013
comment
мне трудно тебя понять - person Viswa; 31.07.2013
comment
Что я могу сделать, чтобы вы поняли? - person surhidamatya; 31.07.2013
comment
обновить вопрос с последним кодом (с изменениями, которые вы сделали после моего ответа) - person Viswa; 31.07.2013

Вы можете заставить компонент домашней страницы вести себя как Ext.Viewport.

Из документов:

Ext.Viewport — это экземпляр, созданный при использовании Ext.setup. Поскольку Ext.Viewport расширяется от Ext.Container, он имеет макет (по умолчанию Ext.layout.Card). Это означает, что вы можете добавлять в него элементы в любое время из любого места кода. Полноэкранная конфигурация Ext.Viewport установлена ​​по умолчанию, поэтому она будет занимать весь экран.

Вы в основном должны дать Домашней странице layout: 'card'. Затем вы можете добавить к нему виды, как если бы это был основной экран просмотра.

[EDIT] Для удобства присвойте контейнеру домашней страницы идентификатор:

{
    id: 'homepage',
    xtype:'homepage',
    cls: 'homePage',
    //docked: 'center',
    layout: 'card'
},

var view = Ext.getCmp("viewId");          // replace this code with the code to
                                          // get the view you actually want
                                          // to add

var homepage = Ext.getCmp("homepage");    // get it by the id we set before
homepage.animateActiveItem(view, 'fade'); // you can animate a transition
homepage.add(view);                       // or just add it

[EDIT] Вы также можете добавить создание экземпляров на лету, как вы делали это раньше:

homepage.add([
    { xtype: 'publishedword' }
]);
person Andrea Casaccia    schedule 31.07.2013
comment
Обнаружено: Uncaught TypeError: невозможно вызвать метод 'animateActiveItem' из неопределенного - person surhidamatya; 31.07.2013
comment
Мой код не предназначен для работы путем копирования и вставки, попытайтесь понять, что я имею в виду, и настройте его для вашего случая. В любом случае, я отредактировал, чтобы показать вам, как присвоить идентификатор вашему компоненту. - person Andrea Casaccia; 31.07.2013
comment
я удалил этот код homepage.animateActiveItem(view, 'fade'); и это сработало. Поскольку я уже принял ответ, я проголосовал за вас - person surhidamatya; 31.07.2013
comment
Я не хочу, чтобы вы меняли принятый ответ, если считаете, что ответ @Viswa лучше; но просто для вашего сведения, если вы хотите изменить ответ, потому что лучший ответ приходит позже, вы можете это сделать. - person Andrea Casaccia; 31.07.2013