1. 命名空间的适用场景

每个组件都是命名空间的一部分,如果Org中设置了命名空间前缀,那么需使用该命名空间访问组件。否则,使用默认命名空间访问组件,系统默认的命名空间为“c”。

  • 如果Org没有创建命名空间前缀,下述情况必须使用“c”命名空间前缀:
    • 引用自定义创建的组件
    • 引用自定义创建的事件
  • 如果Org没有创建命名空间,下述情况下Org会自动使用隐式命名空间,即该场景下无需使用指定的命名空间前缀:
    • 引用自定义对象
    • 引用标准对象和自定义对象的字段
    • 引用Apex的控制类
  • 如果Org创建了命名空间前缀,下述情况下必须使用自定义的命名空间前缀:
    • 引用自定义创建的组件
    • 引用自定义创建的事件
    • 引用自定义对象
    • 引用标准对象和自定义对象的字段
    • 引用Apex的控制类
    • 引用静态资源

2 命名空间命名规则

命名规则必须满足以下条件:

  • 以字母开头
  • 包含1-15个字母数字字符
  • 不包含两个下划线

例如: myNamespace123和my_namespace是有效的;123MyNamespce和my__namespace是无效的。

3 创建命名空间

Setup-->Packages(注意:该条目只在Salesforce Classic版本中才有)-->Developer Settings-->Edit

Check Avaliability校验名称是否满足规则。

4 命名空间使用示例

这里以Aura组件使用命名空间作为示范。

  • Org没有设置命名空间前缀
引用项示例
标记中使用组件<c:myComponent>
系统属性中使用组件

<aura:component extends="c:myComponent">
<aura:component implements="c:myInterface">

Apex控制类<aura:component controller="ExpenseController">
属性的类型为自定义对象<aura:attribute name="expense" type="Expense__c" /> 
属性的类型为自定义对象,并且设置默认值
<aura:attribute name="newExpense" type="Expense__c"
    default="{ 'sobjectType': 'Expense__c',
               'Name': '',
               'Amount__c': 0,
               …
    }" />
表达式中含有自定义对象的字段<ui:inputNumber value="{!v.newExpense.Amount__c}" label=… />
javascript函数中含有自定义对象字段
updateTotal: function(component) {
    …
    for(var i = 0 ; i < expenses.length ; i++){
        var exp = expenses[i];
        total += exp.Amount__c;
    }
    …
}
在Javascript函数中动态创建新的组件
var myCmp = $A.createComponent("c:myComponent", {},
    function(myCmp) { }
);
在Javascript函数中的接口对比aCmp.isInstanceOf("c:myInterface")
注册事件<aura:registerEvent type="c:updateExpenseItem" name=… />
事件处理<aura:handler event="c:updateExpenseItemaction=… />
显式依赖<aura:dependency resource="markup://c:myComponent" />
Javascript函数中的应用事件var updateEvent = $A.get("e.c:updateExpenseItem");
静态资源<ltng:require scripts="{!$Resource.resourceName}styles="{!$Resource.resourceName}" />
  • Org设置了命名空间前缀
引用项示例
标记中使用组件<yournamespace:myComponent />
系统属性中使用组件

<aura:component extends="yournamespace:myComponent">
<aura:component implements="yournamespace:myInterface">

Apex控制类<aura:component controller="yournamespace.ExpenseController">
属性的类型为自定义对象<aura:attribute name="expenses" type="yournamespace__Expense__c[]" />
属性的类型为自定义对象,并且设置默认值
<aura:attribute name="newExpense" type="yournamespace__Expense__c"
    default="{ 'sobjectType': 'yournamespace__Expense__c',
               'Name': '',
               'yournamespace__Amount__c': 0,
               …
    }" />
表达式中含有自定义对象的字段<ui:inputNumber value="{!v.newExpense.yournamespace__Amount__c}" label=… />
javascript函数中含有自定义对象字段
updateTotal: function(component) {
    …
    for(var i = 0 ; i < expenses.length ; i++){
        var exp = expenses[i];
        total += exp.yournamespace__Amount__c;
    }
    …
}
在Javascript函数中动态创建新的组件
var myCmp = $A.createComponent("yournamespace:myComponent",
    {},
    function(myCmp) { }
);
在Javascript函数中的接口对比aCmp.isInstanceOf("yournamespace:myInterface")
注册事件<aura:registerEvent type="yournamespace:updateExpenseItem" name=… />
事件处理<aura:handler event="yournamespace:updateExpenseItem" action=… />
显式依赖<aura:dependency resource="markup://yournamespace:myComponent" />
Javascript函数中的应用事件var updateEvent = $A.get("e.yournamespace:updateExpenseItem");
静态资源<ltng:require scripts="{!$Resource.yournamespace__resourceName}styles="{!$Resource.yournamespace__resourceName}" />

作者:吴家二少

博客地址:https://www.cnblogs.com/cloudman-open/

本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接

01-02 01:39