2017-10-19 113 views
0

我在侧边栏中有几个小部件。 我不希望这些小部件中的一些显示在我的某些页面上。包含一个小部件,而不是排除所有其他小部件

我不知道怎么写它比这更简单?我有很多例外,所以像这样写就是一本充满线条的书籍。 我只想简单地写成“在这个页面上只包含这个或这些小部件”(而不是“在这个页面上排除这个和这些小部件”)。

<%if(!(page.layout=="alpha" && (name=="w1" || name=="w2" || name=="links" || name=="w3")) && !(page.layout=="beta" && (name=="w400" || name=="w500" || name=="w600"))){ %>

所以问题是如何使简单该页“阿尔法”仅显示例如widget895?

+0

你能修好标签吗?看起来只有EJS标签实际上与这个问题有关。 – skirtle

+0

@skirtle - 完成 – raulbaros

回答

1

我假设你已经在部件上有某种循环,并且name对应于该循环内的当前部件名称。

<% 
    var pageWidgets = { 
     alpha: ['widget895'], 
     beta: ['widget900', 'widget123'] 
    }; 

    var allowedWidgets = pageWidgets[page.layout]; 

    // Loop over the widgets and grab the name, I assume 
    // you're already doing something similar. 
    widgets.forEach(function(widget) { 
     var name = widget.name; 

     // This is the equivalent of the 'if' in your 
     // original code. Note that I've allowed all 
     // widgets by default. 
     if (!allowedWidgets || allowedWidgets.includes(name)) { 
      %> 
      ...widget rendering here... 
      <% 
     } 
    }); 
%> 
+0

关于这是正确的循环 - 关于默认允许所有小部件,我有问题的理解。你能告诉我只有一个小部件“w-12”(三个,“w43”,“w89”,“w75”)只能显示为“page-layout = alpha”吗? – raulbaros

+0

@raulbaros我的例子应该做你原来的问题要求:它只显示'widget895'为页面布局'alpha'。把它改成'w-12'只需要你把'widget895'改成'w-12'。当我说默认情况下,我的意思是,对于没有在'pageWidgets'中列出的任何布局,'allowedWidgets'的值将是'undefined',所以'!allowedWidgets'检查将允许所有的小部件。把它改成'if(allowedWidgets &&'会默认禁止它们,或者你可以设置一个特定的小部件数组作为默认值,记住'<% %>'中的所有内容都只是JavaScript,而不是特殊的EJS语法 – skirtle

+0

现在明白了。 ..谢谢你,一切都好! – raulbaros

相关问题