none
Всем доброго дня! Прошу помощи разобраться с DispForm в SharePoint RRS feed

  • Вопрос

  • Есть список в котором в зависимости от значения должны скрываться одни поля, и отображаться другие.

    Если с NewForm и EditForm проблем не возникло, то в дисп форме функция не работает. Вот скрин переделанной функции под дисп форму. Но он как-то не работает))

    

    19 февраля 2018 г. 9:15

Ответы

  • Добрый день

    дело в том, что в форме просмотра нет возможности обратиться к полю по id

    предлагаю глянуть Как получить значение поля в DispForm



    мой блог не много о SharePoint


    19 февраля 2018 г. 10:32
    Модератор
  • 1. в форме просмотра нет инпутов и как следствие нет возможности использовать .val(). можно попробовать использовать .text()

    2. можно изменить решение. 

    как сейчас:

    при загрузке страницы происходит переопределение рендера поля где мы можем получить значение поля

    так же ваша функция change() добавляется в очередь выполнения после загрузки страницы

    можно все разместить в первой.

    Попробуйте так

    'use strict';
    (function () {
        var ctx = {};
        ctx.Templates = {};
        ctx.Templates.Fields = { 
                   'TaskType':{   'DisplayForm': AddIdInField  }
        };
        SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
        function AddIdInField(ctx) {
        	console.log(ctx.CurrentFieldValue)
    
    		if(ctx.CurrentFieldValue == 'Обычная задача')
    		{		
    			$("[name*='SPBookmark__x0417__x0430__x0434__x0430__x04']").closest('tr').show();
    			$("[name*='SPBookmark__x041a__x0443__x0440__x0430__x04']").closest('tr').show();
    			$("[name*='SPBookmark_Title']").closest('tr').hide();
    		  }
    		  else
    		  {	  
    			$("[name*='SPBookmark_Title']").closest('tr').show();   
    			$("[name*='SPBookmark__x0417__x0430__x0434__x0430__x04']").closest('tr').hide();
    			$("[name*='SPBookmark__x041a__x0443__x0440__x0430__x04']").closest('tr').hide();
    			
    		  };
    
            return '<div id="'+ ctx.CurrentFieldSchema.Name +'">' + SPField_FormDisplay_Default(ctx) + '</div>';
        }
     
    })(); 


    мой блог не много о SharePoint

    • Помечено в качестве ответа Pavel Khodakovskiy 20 февраля 2018 г. 7:11
    20 февраля 2018 г. 5:51
    Модератор

Все ответы

  • Добрый день

    дело в том, что в форме просмотра нет возможности обратиться к полю по id

    предлагаю глянуть Как получить значение поля в DispForm



    мой блог не много о SharePoint


    19 февраля 2018 г. 10:32
    Модератор
  • Здравствуйте, Владимир! Ваш блог очень помогает мне в решении многих проблем, спасибо Вам)

    К моему сожалению, у меня не очень большой опыт в программировании, не могу понять где я могу получить (ctx.CurrentFieldSchema.Name)

     

    Я пробовал обращаться к полю по этому ID:

    Но как я понимаю без перерендеринга, ничего работать не будет. 

    19 февраля 2018 г. 12:12
  • С рендерингом получилось, спасибо большое!

    но функция не работает, не могу понять где ошибка.

    _spBodyOnLoadFunctionNames.push("change");
     
    function change()

    {

      if($("[id*='TaskType']").val() == 'Обычная задача')
        {
      alert(test)
        $("[name*='SPBookmark__x0417__x0430__x0434__x0430__x04']").closest('tr').show();
        $("[name*='SPBookmark__x041a__x0443__x0440__x0430__x04']").closest('tr').show();
        $("[name*='SPBookmark_Title']").closest('tr').hide();   
        
      }
      else

      {
      
        $("[name*='SPBookmark_Title']").closest('tr').show();   
        $("[name*='SPBookmark__x0417__x0430__x0434__x0430__x04']").closest('tr').hide();
        $("[name*='SPBookmark__x041a__x0443__x0440__x0430__x04']").closest('tr').hide();
        
      }

    }

    19 февраля 2018 г. 16:10
  • 1. в форме просмотра нет инпутов и как следствие нет возможности использовать .val(). можно попробовать использовать .text()

    2. можно изменить решение. 

    как сейчас:

    при загрузке страницы происходит переопределение рендера поля где мы можем получить значение поля

    так же ваша функция change() добавляется в очередь выполнения после загрузки страницы

    можно все разместить в первой.

    Попробуйте так

    'use strict';
    (function () {
        var ctx = {};
        ctx.Templates = {};
        ctx.Templates.Fields = { 
                   'TaskType':{   'DisplayForm': AddIdInField  }
        };
        SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
        function AddIdInField(ctx) {
        	console.log(ctx.CurrentFieldValue)
    
    		if(ctx.CurrentFieldValue == 'Обычная задача')
    		{		
    			$("[name*='SPBookmark__x0417__x0430__x0434__x0430__x04']").closest('tr').show();
    			$("[name*='SPBookmark__x041a__x0443__x0440__x0430__x04']").closest('tr').show();
    			$("[name*='SPBookmark_Title']").closest('tr').hide();
    		  }
    		  else
    		  {	  
    			$("[name*='SPBookmark_Title']").closest('tr').show();   
    			$("[name*='SPBookmark__x0417__x0430__x0434__x0430__x04']").closest('tr').hide();
    			$("[name*='SPBookmark__x041a__x0443__x0440__x0430__x04']").closest('tr').hide();
    			
    		  };
    
            return '<div id="'+ ctx.CurrentFieldSchema.Name +'">' + SPField_FormDisplay_Default(ctx) + '</div>';
        }
     
    })(); 


    мой блог не много о SharePoint

    • Помечено в качестве ответа Pavel Khodakovskiy 20 февраля 2018 г. 7:11
    20 февраля 2018 г. 5:51
    Модератор
  • Работает! Спасибо огромное!

    Как то не сообразил обратиться как:  

    if(ctx.CurrentFieldValue == 'Обычная задача')

    В дальнейшем при работе с Диспформами уже буду знать в чем их фишка!

    И еще раз спасибо огромное!

    20 февраля 2018 г. 7:11