是否可以在Javascript文件中使用tal:conditions?

djmepvbi  于 2022-10-30  发布在  Java
关注(0)|答案(1)|浏览(133)

我正在创建一个新的上下文菜单,提供更多的可访问性。旧的菜单使用上下文菜单ID来检查Index.html中的tal条件。我现在的问题是我不再使用action和ID。新的上下文菜单使用不同的ID创建每个菜单。我尝试声明“var emp_menu_items = [];“并将其从Employee类中删除,但我仍然收到未定义的错误。
我还尝试在Index.html中构建新的上下文菜单,但它需要Employee.js中的参数。那么,是否有一个解决方案可以在JS文件中使用tal:conditions?
Index.html

<a metal:fill-slot="context_menus" tal:omit-tag="">
    <ul id="employee_context_menu" class="hidden" tal:define="sec_posted python:container.util.checkSecurity(mn_name='Posted')">
      <li tal:condition="python:layout == 'np'"><a href="#assign_pat">Assign Patients</a></li>
      <li tal:condition="python:container.util.checkSecurity(mn_name='File')"><a href="#hr_file">HR File</a></li>
      <li tal:condition="python:sec_posted"><a href="#schedule">Pay Period Schedule</a></li>
      <li><a href="#Close">Close Menu</a></li>
    </ul>

这是Employee.js类中的旧菜单

$name.contextMenu({
          menu:      "employee_context_menu",
          leftClick: true
        }, function(action, elem, position) {
          if(action == 'Close') {
            jQuery(".contextMenu").hide();
            return true;
          } else if(action === 'hr_file') {
            $iframe.attr('src', 'Personnel/cgi_utran/cgi_utran?args=-i'+$div.data('obj').id).load(function() {resizeIframe(this)});
          } else if(action === 'assign_pat') {

              $j.PatientAssignment.assign_check = emp.id;
              $name.addClass('highlight');

              var title_str ='Assign Patients to ' + employee_name;
              $j.PatientAssignment.sub_title = ''
              var mheight = $j(window).height()*0.7;
              $j('#beds').dialog('close');
              $j('#beds').css('max-height',mheight).dialog({
                      modal: false,
                      title: title_str,
                      height:'auto',
                      width: 'auto',
                      close: function() { $name.removeClass('highlight'); }
              });

              syncPatientAssignments();
              syncBedAssignments();
              return true;

          } else if(action === 'schedule') {
            $iframe.attr('src', 'ScheduleStaff/cgi_daystaff?szDate='+emp.shiftdate+'&szID='+emp.id+'&args=-t').load(function() {resizeIframe(this)});
          } else if(action === 'assign_work') {
            $iframe.attr('src', 'ScheduleStaff/cgi_daystaff?args=-t OneEmployee -I'+emp.id+' -B'+emp.shiftdate).load(function() {resizeIframe(this)});
          } else { }
          $name.addClass('highlight');
          $j("#modal_window").dialog({
            modal:    true,
            width:    'auto',
            show:     'scale',
            hide:     'scale',
            height:   'auto',
            close:  function() {window.location.reload(); $name.removeClass('highlight'); }
          });
        });

我对Employee.js中上下文菜单的更改

employeeContextMenu($div, emp, employee_name, count) {
      var emp_menu_items = [];
      var emp_menu = {};
      emp_menu_items.push({
          name: 'Assign Patients', title: 'Assign Patients',
          fn: function(el) {
            $j.PatientAssignment.assign_check = emp.id;
            var title_str ='Assign Patients to ' + employee_name;
            $j.PatientAssignment.sub_title = ''
            var mheight = $j(window).height()*0.7;

            if ($j('#beds').hasClass("ui-dialog-content") && $j( "#beds" ).dialog( "isOpen" )){
            $j('#beds').dialog('close');
              }
            $j('#beds').css('max-height',mheight).dialog({
                    modal: false,
                    title: title_str,
                    height:'auto',
                    width: 'auto',
                    position: [670, 115],
                    focus: function(event,ui) {
                      $j(".ui-icon-closethick").focus();
                    },
                    buttons: {
                      OK: function(){
                        $j(this).dialog("close");
                      }
                    }

            });

            syncPatientAssignments();
            syncBedAssignments();
            }
        });
      emp_menu_items.push({
            name: 'HR File', title: 'HR File',
            fn: function(el){return pop_over_window('Personnel/cgi_utran/cgi_utran?args=-i'+$div.data('obj').id);}});
      emp_menu_items.push({
            name: 'Pay Period Schedule', title: 'Pay Period Schedule',
            fn: function(el){return pop_over_window('ScheduleStaff/cgi_daystaff?szDate='+emp.shiftdate+'&szID='+emp.id+'&args=-t');}});
      emp_menu_items.push({
            name: 'Close Menu', title: '',
            fn: function(el){return false}, });

      emp_menu = new ContextMenu('employee_context_menu_'+count, 'Employee Context Menu Options', '.name', emp_menu_items, {container:$div[0]});
    }
ejk8hzay

ejk8hzay1#

我猜您正在寻找的是在javascript“文件”中使用服务器端代码(我从您的问题的标记中推测您正在使用Zope,因此javascript将包含在ZODB中的一个对象中)。
为此,将 * Employee.js * 创建为DTML方法DTML文档脚本(Python)
在DTML对象中,您可以使用<dtml-if>my js code<dtml-else>more js code</dtml-if>和任何其他DTML构造,而不是tal-conditions。
当然,你也可以编写一个Python脚本来返回javascript代码。

相关问题