Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2012, 21:36
Профессор
Отправить личное сообщение для potkin Посмотреть профиль Найти все сообщения от potkin
 
Регистрация: 23.08.2008
Сообщений: 162

Ссылки внутри страницы (Ext.tree.Panel -> Ext.panel.Panel)
Добрый вечер !!!

Надо сделать аналог HTML-а в ExtJS:
<h1 id="heading1">heading 1</h1>
...
<a href="#heading1">Ссылка на heading 1</a>

Есть: слева Ext.tree.Panel (оглавление), по центру Ext.panel.Panel (HTML).
Надо при клике на ветку дерева проматывать Панель к месту где есть "heading1"
Код:
//Дерево (Оглавление документа)
 var TreeViewOglav = Ext.create('Ext.tree.Panel', {
 store: storeOglav,
 region: "west",
 ...
 listeners: {
  itemclick: function (view, rec, item, index, eventObj) {
   var _leaf = rec.get('leaf');
   if (_leaf == true) {
   //FunShowHeading('heading' + rec.get('id'));
   //Вот здесь надо промотать текст, находящийся в Панели, до места где находится "heading" + rec.get('id')
   }
  }
 }
 });

//Панель (Документ в формате HTML)
 var panelDocs = new Ext.create("Ext.panel.Panel", {
  title: "Документ",
  autoScroll: true,
  autoLoad: {
  url: "Docs.ashx?id_doc=" + id
  },
 region: 'center'
 });

Последний раз редактировалось potkin, 16.04.2012 в 22:03.
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2012, 10:34
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

можно так
<!DOCTYPE html>
<html>
<head>
    <title>demo</title>
    <script src='http://dev.sencha.com/deploy/ext-4.0.7-gpl/ext-all.js'></script>
    <link rel="stylesheet" href="http://dev.sencha.com/deploy/ext-4.0.7-gpl/resources/css/ext-all.css">
    <script>

     
    Ext.onReady(function() {

      var text = Ext.String.repeat('<p>текст</p>', 30);
      
      var treeStore = Ext.create('Ext.data.TreeStore', {
          root: {
              expanded: true,
              children: [
                  { text: "Ветка", expanded: true, children: [
                      { text: "Заголовок 1", leaf: true },
                      { text: "Заголовок 2", leaf: true}
                  ]},
                 { text: "Заголовок 3", leaf: true}
              ]
          }
      });
      
      var treePanel = Ext.create('Ext.tree.Panel', {
          title: 'Tree',
          width: 200,
          store: treeStore,
          rootVisible: false,
          region: 'west'
      }); 
      
      treePanel.on('itemclick', function (view, rec, item, index) {
        if (index) { // для простоты просто индекс элементов использовал
          document.location.href = "#heading" + index;
        }
      });
      
      var htmlPanel = Ext.create('Ext.panel.Panel', {
          region: 'center',
          autoScroll: true,
          bodyStyle: 'padding:10px',
          html: '<h1 id="heading1">Заголовок 1</h1>' + text + 
                '<h1 id="heading2">Заголовок 2</h1>' + text + 
                '<h1 id="heading3">Заголовок 3</h1>' + text
      });
      
      
      Ext.create('Ext.container.Viewport', {
            layout  : 'border',
            defaults: {
              split: true
            },
            items: [
              treePanel,
              htmlPanel
            ]          
        });
        
    });                    
 
    </script>
</head>
  <body></body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2012, 15:14
Профессор
Отправить личное сообщение для potkin Посмотреть профиль Найти все сообщения от potkin
 
Регистрация: 23.08.2008
Сообщений: 162

Да, всё классно работает !!!

Но у меня все items располагаются в Ext.Viewport
Ext.create("Ext.Viewport", {
 layout: "border",
 html: '<h1> Документация ... </h1>',
 ...
 items: [
  ...
 ]
});

И при клике на оглавления исчезает верхушка Ext.Viewport-та, вот эта:
...
 html: '<h1> Документация ... </h1>',
 ...

Не подскажите, почему так происходит ???
Ответить с цитированием
  #4 (permalink)  
Старый 18.04.2012, 10:54
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

уберите html: ... из viewport
и добавьте "северный" north элемент

в моем примере выше замените блок viewport на, например, такой
Ext.create('Ext.container.Viewport', {
            layout  : 'border',

            defaults: {
              split: true
            },
            items: [
              {xtype: 'component', region: 'north', style: 'padding: 10px;', html: '<h1> Документация ... </h1>'},
              treePanel,
              htmlPanel
            ]         
        });

весь код http://jsbin.com/egudom/edit#source
демо http://jsbin.com/egudom
Ответить с цитированием
  #5 (permalink)  
Старый 18.04.2012, 16:15
Профессор
Отправить личное сообщение для potkin Посмотреть профиль Найти все сообщения от potkin
 
Регистрация: 23.08.2008
Сообщений: 162

Pavel M.,
Ок, спасибо !!!
Ответить с цитированием
  #6 (permalink)  
Старый 18.04.2012, 19:46
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от Pavel M.
document.location.href = "#heading" + index;
а что обязательно так извращаться? зачем тогда вообще ExtJS?
Ответить с цитированием
  #7 (permalink)  
Старый 18.04.2012, 20:01
Профессор
Отправить личное сообщение для potkin Посмотреть профиль Найти все сообщения от potkin
 
Регистрация: 23.08.2008
Сообщений: 162

nekto_O,
а что обязательно так извращаться? зачем тогда вообще ExtJS?

А ещё есть варианты ???
Ответить с цитированием
  #8 (permalink)  
Старый 18.04.2012, 21:05
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

...
TreeViewOglav.on('itemclick', function (v, rec, itm, idx) {
       var el = Ext.get('heading'+(++idx)); // при условии что порядковый номер нода совпадает с порядком заголовка
       if( !el ) return false;
        
       var b = panelDocs.body;
       b.scroll('b', el.getY(), true);
});
...

примерно так, но вообще юзать ид-шники не советую, лучше name или class в крайнем случае (если сразу с несколькими элементами нужно работать)...
Ответить с цитированием
  #9 (permalink)  
Старый 18.04.2012, 22:55
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от nekto_O Посмотреть сообщение
а что обязательно так извращаться? зачем тогда вообще ExtJS?
это просто самый простой способ был
Ответить с цитированием
  #10 (permalink)  
Старый 19.04.2012, 07:53
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от Pavel M.
это просто самый простой способ был
в том то и дело что это скорее извращение а не адекватный способ скроллинга, почему бы тогда например вместо "Ext.panel.Panel" не заюзать обычный фрейм и не издеваться над ним подобным образом?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск