在字符串中使用自定义标签会引发“字段完整性异常”

时间:2018-08-16 05:37:02

标签: salesforce lightning

我想在列表中使用自定义标签,然后将其绑定到多选择列表。

   <aura:attribute name="genderOptions" type="List"
                default="[
                         {'label': {!$Label.c.DM_Gender_Male},'Value': 
                                     'Male'},
                         {'label': {!$Label.c.DM_Gender_Female}, 'value': 
                                    'Female'}
                         ]"
                />

当我尝试保存组件时,出现以下异常(FIELD INTEGRITY EXCEPTION)   无法保存DMSegmentation.cmp:无法在属性值中混合表达式和文字字符串,请尝试像{!'foo'+ v.bar}那样重写:源

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

实际上,可以在组件内部创建它。您缺少的两件事是:

  1. 引号"必须表示为XML转义实体。

  2. 打开括号{ }必须用自定义标签表示。


组件:

<aura:component >
    <aura:attribute 
     name="genderOptions"
     type="List"
     default="{! ' [ ' 
               + $Label.c.LEFT_CURLY_BRACKET 
                       + '&quot;' + 'label'                   + '&quot;' 
               + ' : ' + '&quot;' + $Label.c.DM_Gender_Male   + '&quot;' 
               + ' , ' + '&quot;' + 'value'                   + '&quot;'
               + ' : ' + '&quot;' + 'Male'                    + '&quot;'
               + $Label.c.RIGHT_CURLY_BRACKET 
               + ' , ' 
               + $Label.c.LEFT_CURLY_BRACKET 
                       + '&quot;' + 'label'                   + '&quot;' 
               + ' : ' + '&quot;' + $Label.c.DM_Gender_Female + '&quot;' 
               + ' , ' + '&quot;' + 'value'                   + '&quot;'
               + ' : ' + '&quot;' + 'Female'                  + '&quot;'
               + $Label.c.RIGHT_CURLY_BRACKET 
               + ' ] '
              }"
    />
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
</aura:component>

自定义标签:

<?xml version="1.0" encoding="UTF-8"?>
<CustomLabels xmlns="http://soap.sforce.com/2006/04/metadata">
    <labels>
        <fullName>LEFT_CURLY_BRACKET</fullName>
        <language>en_US</language>
        <protected>false</protected>
        <shortDescription>LEFT CURLY BRACKET</shortDescription>
        <value>{</value>
    </labels>
    <labels>
        <fullName>RIGHT_CURLY_BRACKET</fullName>
        <language>en_US</language>
        <protected>false</protected>
        <shortDescription>RIGHT CURLY BRACKET</shortDescription>
        <value>}</value>
    </labels>
    <labels>
        <fullName>DM_Gender_Male</fullName>
        <language>en_US</language>
        <protected>false</protected>
        <shortDescription>DM_Gender_Male</shortDescription>
        <value>♂</value>
    </labels>
    <labels>
        <fullName>DM_Gender_Female</fullName>
        <language>zh_CN</language>
        <protected>false</protected>
        <shortDescription>DM_Gender_Female</shortDescription>
        <value>♀</value>
    </labels>
</CustomLabels>

用于获取属性值并将其记录在控制台中的客户端控制器:

({
    doInit : 
    function( component , event , helper ){
        var list = component.get("v.genderOptions")
        console.log( list )
        console.log( JSON.parse( list ) ) 
    }

,   f :
    function(){

    }
})

记录的结果:

enter image description here

答案 1 :(得分:0)

我找到了解决方案。唯一的解决方案是通过捆绑软件中可用的客户端控制器访问这些列表,然后在其中添加自定义标签。否则,闪电不允许您在组件中创建的列表内使用自定义标签。为此必须使用doInit方法

 ({
     doInit: function(component, event, helper) {
      var values = [
        $A.get("$Label.c.DM_Gender_Male"),
         $A.get("$Label.c.DM_Gender_Female")            
      ];

      component.set('v.genderOptions', values);
   }
})