当前位置: 首页 > 编程日记 > 正文

Salesforce Lightning开发学习(二)Component组件开发实践

lightning的组件区分标准组件、自定义组件和AppExchange组件。标准组件由SF提供,自定义组件由developer自行开发,AppExchange组件由合作伙伴建立。下面我们写一个简单的列表demo来学习下自定义开发组件Component。

第一步:新建一个对象:电影,API:Movie__c,下表是其相关的字段

字段名字段API字段类型描述
电影名称Name文本
主演ToStar__c文本(255)
主题曲Theme__c文本(255)
导演Director__c文本(255)
上映时间ShowTime__c日期








第二步:创建一个Component,命名为MyTest_Movie

这时候想必已经有注意到在右侧栏有一列属性如下图:

可以点击这些选项卡看看里面都是什么内容

COMPONENT:

类似与H5页面,将H5页面进行框架式(aura)封装,并能够与Js Controller和Helper进行交互,通过Css进行渲染,也可以调用slds提供的标准样式, 理解为view,叫做组件;

CONTROLLRT:

view层的控制层,能够与view层进行数据交互,是对Js的封装,进行异步页面处理,能够调用helper层的逻辑;

HELPER:
  从开发规范来说,是逻辑层,将逻辑代码封装在此供Js Controller进行调用,可以写一些公共方法,同时可以进行与后台apex类进行交互;
STYLE:
  针对cmp组件进行渲染,实现页面效果;  

简单说,每一个选项卡对应的都是Component的一个子文件,把这些合并在一起我们称之为Bundle。Bundle翻译过来是一批,捆之类的词,也就是说,一个Bundle是包含了component,controller,Helper,Style等文件的一个集合。

下面我们完善MyTest_Movie.cmp

 1     <aura:component controller="MyTestMovieController">
 2     <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
 3     
 4     <aura:attribute name="results" type="List" description="电影列表"/>        
 5     <aura:attribute name="count" type="Integer" default="0" description="电影记录数"/> 
 6     <div>
 7   
 8     <table id="mTable">
 9             <thead>
10                 <tr>
11                     <th><div>电影名</div></th>
12                     <th><div>导演</div></th>
13                     <th><div>主演</div></th>
14                     <th><div>主题曲</div></th>
15                     <th><div>上映时间</div></th>
16                 </tr>
17             </thead>
18             <tbody>
19                 <aura:iteration items="{!v.results}" var="item">
20                     <tr> 
21                         <td><div>{!item.Name}</div></td>
22                         <td><div>{!item.Director__c}</div></td>
23                         <td><div>{!item.To_Star__c}</div></td>
24                         <td><div>{!item.Theme__c}</div></td>
25                         <td>
26                             <lightning:formattedDateTime value="{!item.Release_Time__c}"  year="numeric" month="numeric" day="numeric"  />
27                         </td>
28                     </tr>                    
29                 </aura:iteration>
30             </tbody>
31         </table>
32     <div>&nbsp;</div>
33     <span style="float:right;">共{!v.count}条记录</span>
34    </div>
35 </aura:component>

其中的 “<aura:handler name="init" value="{!this}" action="{!c.doInit}"/>”调用了MyTest_MovieController.js中的doInit方法,其中"c"代表的
JS文件中的Controller,其中MyTest_MovieController.js文件如下
1 ({
2     doInit : function(component, event, helper) {
3         
4     }
5 })

可以看到现在的doInit方法是空的,然后我们将MyTest_Movie添加到应用程序MyTest.app中进行查看,(Ctrl+Shift+A查看当前所有lightning组件)

<aura:application ><c:MyTest_Movie />
</aura:application>

点击预览,界面如下

界面效果可以说是很简陋了,然后呢,我们在MyTest_Movie.css中添加一点点样式,设置全局默认字体大小与颜色,控制表格样式,看看CSS是如何控制这个页面显示的
 
 1 .THIS {
 2     font-size: 12px;
 3     color:red;
 4 }
 5 .THIS table th{
 6    border: 1px solid blue;
 7    color:blue;
 8    padding:15px;
 9    border-width:1px 1px 1px 1px;
10 }

其中要注意的是,“.THIS”是lightning的component的选择器,必须有,不写则会提示错误

Failed to save MyTest_Movie.css: Issue(s) found by CSS Parser (0Ad7F000000rGrH): CSS selector must begin with '.cMyTest_Movie' or '.THIS' (line 5, col 1)

重新预览页面效果

第三步是创建一个Apex类,MyTestMovieController

 1 /*********
 2      *  Author:ricardo
 3      *  Time:2018-03-21
 4      *  Function:MyTest_Movie 后台控制类
 5      *  Test:
 6      */
 7 public class MyTestMovieController{
 8     //初始化
 9     @AuraEnabled
10     public static List<Movie__c> GetAll(){
11         List<Movie__c> movieList = new List<Movie__c>();
12         movieList = [select ShowTime__c,ToStar__c,Theme__c,Director__c,Name from Movie__c limit 50];
13         return movieList;
14     }
15 }

接下来完善MyTest_MovieController.js

1 ({
2     doInit : function(component, event, helper) {
3         helper.Init(component,event);
4     }
5 })

完善MyTest_MovieHelper.js

 1 ({    
 2     // 初始化加载
 3     Init : function(component,event){
 4         // 调用后台类
 5         var action = component.get("c.GetAll");
 6         // 设置回调函数
 7         action.setCallback(this,function(response){
 8             // 返回状态
 9             var state = response.getState();
10             if(state == 'SUCCESS'){
11                 var movieList = response.getReturnValue();
12                 if(movieList == 0){
13                     component.set("v.message",true);
14                 }else{
15                     component.set("v.message",false);
16                 }
17                 //参数传递
18                 component.set("v.results",movieList);20                 component.set("v.count",movieList.length);
21             }
22         });
23         // 队列处理
24         $A.enqueueAction(action);
25     }
26 })

此时初始页面就开发完成了,我们可以查看存储在系统中的电影列表了

到这里为止,我们从系统中获取数据,并显示在页面已经完成了(虽然页面丑的令人难以直视QAQ),那么接下来我们将回顾下这段代码中的运行流程。

不同于传统的MVC架构,Salesforce的lightning使用的架构是VCCM架构

数据从服务器的数据库(M)到页面(V)上被显示出来还经过了后台控制器(APEX Controller)与前端控制器(JAVASCRIPT  Controller)两层控制。以上面的Movie为例

具体的运行过程如图所示,需要注意一点的是,APEX类中的方法需要与lightning组件进行交互,则必须加注解: @AuraEnabled

最后,对于这个简陋的页面,我们来使用一次lightning自带的样式库修饰一番

 1 <aura:component controller="MyTestMovieController">
 2     <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
 3     
 4     <aura:attribute name="results" type="List" description="电影列表"/>    
 5     <aura:attribute name="count" type="Integer" default="0" description="电影记录数"/>    
 6     <div>
 7   
 8      <table  class="slds-table slds-table--bordered slds-table--cell-buffer">
 9             <thead>
10                 <tr class="slds-text-title--caps">
11                     <th scope="col"><div class="slds-truncate">电影名</div></th>
12                     <th scope="col"><div class="slds-truncate">导演</div></th>
13                     <th scope="col"><div class="slds-truncate">主演</div></th>
14                     <th scope="col"><div class="slds-truncate">主题曲</div></th>
15                     <th scope="col"><div class="slds-truncate">上映时间</div></th>
16                 </tr>
17             </thead>
18             <tbody>
19                 <aura:iteration items="{!v.results}" var="item">
20                     <tr>       
21                         <td><div class="slds-truncate">{!item.Name}</div></td>
22                         <td><div class="slds-truncate">{!item.Director__c}</div></td>
23                         <td><div class="slds-truncate">{!item.ToStar__c}</div></td>
24                         <td><div class="slds-truncate">{!item.Theme__c}</div></td>
25                         <td>
26                             <lightning:formattedDateTime value="{!item.ShowTime__c}"  year="numeric" month="numeric" day="numeric"  />
27                         </td>
28                     </tr>                    
29                 </aura:iteration>
30             </tbody>
31         </table>
32     <div>&nbsp;</div>
33     <span class="slds-size_small" style="float:right;">共{!v.count}条记录</span>
34    </div>
35 </aura:component>

最后要注意的一点是,给组件加上相关的样式后,在预览之前,要给MyTest.app继承lightning的样式库文件:extends="force:slds"

<aura:application extends="force:slds"><c:MyTest_Movie />
</aura:application>

预览相关页面如下

总结:本篇主要介绍了component组件的基本开发,以及组件与后台之间的数据交互问题,有错误的地方欢迎指出,有疑问的欢迎在评论区留言

转载于:https://www.cnblogs.com/luqinghua/p/8990266.html

相关文章:

转 java c++互传arraylist

Java JNI由浅入深(包括&#xff1a;Java和C互传ArrayList泛型对象参数) 2010-11-25 09:57 1694人阅读 评论(1) 收藏 举报我们知道Java是一个运行在虚拟机里面的高级的编程语言&#xff0c;如果要调用系统的动态链接库的话&#xff0c;就要先声明native修饰的方法(类似接口里面的…

GoAccess安装及分析nginx实时日志

GoAccess是一个基于终端的快速日志分析器。其核心思想是实时快速分析和查看Web服务器统计信息&#xff0c;而无需使用您的浏览器&#xff08;如果您希望通过SSH快速分析访问日志&#xff0c;或者只是喜欢在终端中工作&#xff09;&#xff0c;终端输出是默认输出&#xff0c;但…

在写游戏时钟类时,应确保时钟的计算是以某个固定的CPU为标准的

在写游戏时钟类时&#xff0c;应确保时钟的计算是以某个固定的CPU为标准的。下面通过一个例子来阐述如何实现这一思想&#xff1a; // 记录特定进程的affinity maskunsigned long lProcessAffinityMask;// 记录系统的affinity maskunsigned long lSystemAffinityMask;::GetProc…

学习Spring Boot

Spring boot 是什么 ? 简单说, spring boot 是一个构建项目的工具, 一个脚手架. Spring boot 能干什么? spring boot 做非常少的配置就可以构建生产级别的单体应用. Spring boot 怎么干的? 下面让我们来用spring boot 做一个hello world. 环境准备, 需要保证你的机器上已经有…

Linux添加用户组和添加用户

1.用户组 添加组&#xff1a;groupadd 组名 [rootServer-n93yom ~]# groupadd dev [rootServer-n93yom ~]# cat /etc/group | grep dev dev:x:10011: [rootServer-n93yom ~]# 删除组&#xff1a;groupdel 组名 [rootServer-n93yom ~]# groupdel dev [rootServer-n93yom ~]# cat…

用javascript实现仿163的js广告向下挤压页面的效果

本次实现一个js小小特效&#xff0c;效果就是广告从页面的上方出来将基本页面挤压下去。 实现的思路是将两个div&#xff08;广告div1和div2&#xff09;。将div1的高度不断增加&#xff0c;增加的同时div2的y轴坐标变大&#xff0c;div1的高度增加多少相对应的y轴坐标加大多少…

【eclipse】快速调整eclipse背景和格式的方法

第一步 第二步 第三步 &#xff1a;选择相应的格式 效果如图

对做C#自定义控件的一点心得

近期在做DSOFramer这个控件&#xff0c;打算自己弄一个自定义控件来封装这个COM组件&#xff0c;中间遇到很多曲折&#xff0c;研究了一个星期&#xff0c;终于完成了 下面总结一下我做DSOFramer这个自定义控件的注意地方&#xff1a; 1、在创建一个Windows窗体控件库的时候&am…

numpy知识点

1、nonzero 对于一维数据来说&#xff0c;将返回符合条件的 下标 >>> b1 np.array([True, False, True, False]) >>> np.nonzero(b1)(array([0, 2]),)对于二维数据来说&#xff0c;将返回两维 元组&#xff0c; 第一维是符合条件的 x的索引&#xff0c;第二…

Excel导入异常Cannot get a text value from a numeric cell解决

POI操作Excel时偶尔会出现Cannot get a text value from a numeric cell的异常错误。 异常原因&#xff1a;Excel数据Cell有不同的类型&#xff0c;当我们试图从一个数字类型的Cell读取出一个字符串并写入数据库时&#xff0c;就会出现Cannot get a text value from a numeric …

【蓝桥java】递归基础之反向输出字符串

题目&#xff1a;输入一个字符串&#xff0c;要求将该字符串反向输出 代码实现&#xff1a; package xn.zzunit.recurrence;/*** 递归方法反向输出字符串* author tyrantForever**/ public class Project1 {public static void main(String[] args) {String testString "…

SQL Server中灾难时备份结尾日志(Tail of log)的两种方法

简介 在数据库数据文件因各种原因发生损坏时&#xff0c;如果日志文件没有损坏。可以通过备份结尾日志&#xff08;Tail of log)使得数据库可以恢复到灾难发生时的状态。 例如: 上图中。在DB_1中做了完整备份&#xff0c;在Log_1,Log_2处做了日志备份。在Log_2备份之后不久&…

C examples

最近在看David R. Hanson 的《C Interfaces and Implementations》&#xff0c;文中第一章提到了Literate Programming 作者举了一个例子&#xff1a; 功能&#xff1a;用于检测输入中相邻且相同的单词 #include<stdio.h> #include<math.h> #include<errno.h&g…

特征工程:特征生成,特征选择(三)

转自&#xff1a;https://blog.csdn.net/cymy001/article/details/79169862 特征生成 特征工程中引入的新特征&#xff0c;需要验证它确实能提高预测得准确度&#xff0c;而不是加入一个无用的特征增加算法运算的复杂度。 1. 时间戳处理 时间戳属性通常需要分离成多个维度比如年…

JAVA设计模式之不变模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述不变&#xff08;Immutable&#xff09;模式的&#xff1a; 一个对象的状态在对象被创建之后就不再变化&#xff0c;这就是所谓的不变模式。 不变模式的结构 不变模式可增强对象的强壮型(robustness)。不变模式允许多个对象共享…

【蓝桥java】递归基础之智力训练

题目&#xff1a; 匪警请拨110,即使手机欠费也可拨通&#xff01; 为了保障社会秩序&#xff0c;保护人民群众生命财产安全&#xff0c;警察叔叔需要与罪犯斗智斗勇&#xff0c;因而需要经常性地进行体力训练和智力训练&#xff01; 某批警察叔叔正在进行智力训练&#xff1a; …

EF-Entity Framework 相关技术点收集贴

不定期、偶尔、添加更新 在网络上看到或者自己开发过程中碰到的EF&#xff0d;Entity Framework相关技术点 本文地址:http://www.cnblogs.com/vnii/archive/2012/02/28/2371736.html 1.数据表字段有默认值&#xff0c;比如DateTime类型的字段CreateTime默认值为数据新增的时间g…

[翻译]LightRacer游戏架构

1.0版本的Light Racer架构可说的不多。仅有一个单一的Activity&#xff0c;进行按钮的处理&#xff0c;显示游戏相关数据和显示GameView。我将在另一篇文章中说明游戏的画面是如何工作的&#xff0c;但是现在我先声明一下的就是&#xff1a;在Android中&#xff0c;单个Activit…

case when里的like功能 ////// 截取(substr)

case when里的like功能 假如要用到case when又要用到like这样的功能&#xff0c;即如果字符串包含‘语文’就怎么怎么样&#xff0c;包含‘数学’就怎么怎么样&#xff0c;包含‘英语’就怎么怎么样&#xff0c;like是用于where中的&#xff0c;放在case when里面是无效的&…

在Asp.Net MVC中设定site路径所对应的默认action

设置路由的default的Controller和Action可以达到我们预期的效果&#xff0c;代码如下所示&#xff1a; public class RouteConfig {public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapRoute(n…

【蓝桥java】递归基础之输出连续数字

题目&#xff1a;使用递归方法输出连续的数字 代码实现&#xff1a; package xn.zzunit.recurrence;/*** 递归方法输出连续的数字* author tyrantForever**/ public class Project2 {public static void main(String[] args) {printNumber(2, 9);}public static void printNu…

慢慢学Linux驱动开发,第十章,GNU C的扩展

内核开发者使用的C语言涵盖了ISO C99标准和GNU C扩展特性。这里简单介绍一下GNU C的扩展特性。 1.内联&#xff08;inline&#xff09;函数 GNU的C编译器支持内联函数&#xff0c;也是C的一个特性之一。就是函数会在所调用的位置上展开&#xff0c;这样做虽然会导致代码量的增加…

vMA学习笔记之一:将vMA加入域

目的&#xff1a; 将vMA加入域的方法 操作步骤&#xff1a; 1、 开启vMA 2、 按住AltF2切换到虚拟终端界面&#xff0c;使用vi-admin用户登录 2 3、 已经登录进来了 4、 在进行加域操作之前&#xff0c;必须确保DNS配置正确&#xff08;在初始化安装的时候会提示你设置DNS&…

关于DWG文件转换成PDF

最近有这样一个需求&#xff0c;客户会提供DWG文件&#xff0c;因为DWG文件是不能直接在网页上显示的&#xff0c;所以必须对他做处理&#xff0c;要求是转换成PDF格式。我查了很久的资料&#xff0c;很多都是基于C#和.NET的方法&#xff0c;而且都是说的很模糊&#xff0c;不是…

剑指offer--day07

1.1 题目&#xff1a;反转链表&#xff1a;输入一个链表&#xff0c;反转链表后&#xff0c;输出新链表的表头。 1.2 思路&#xff1a;这道题&#xff0c;我们要做到的是反转链表&#xff0c;我们的思路是将前一个节点与后一个节点断开&#xff0c;然后让后一个节点指向前一个节…

【蓝桥java】递归基础之计算共多少种走法

计算从某个位置&#xff08;x,y&#xff09;走到&#xff08;0,0&#xff09; 一共多少种走法 代码实现&#xff1a; package xn.zzunit.recurrence;/*** 从某个位置&#xff08;x,y&#xff09;走到&#xff08;0,0&#xff09; 一共多少种走法* author tyrantForever**/ pub…

数据库设计的三大范式

为了建立冗余较小、结构合理的数据库&#xff0c;设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。在实际开发中最为常见的设计范式有三个&#xf…

JS得到对应字段 的值。遍历

这个写法不是经典。我受感触是因为。我写很多代码&#xff0c;没去想过怎么样去节省我们的开发时间&#xff0c;应该去写一些通用性的代码。 而且。我也没有把C#代码优化的思想转到各个地方。像JS的代码。我就没去想过怎么去优化。 加油吧。 function getPageListSet(pageIndex…

微信小程序开发中如何实现侧边栏的滑动效果?

原文链接&#xff1a;https://mp.weixin.qq.com/s/7CM18izpZqf0oc0D75IGmQ1概述在手机应用的开发中侧边栏滑动是很常见的功能&#xff0c;当然在小程序中也不会例外&#xff0c;很多特效还没有成熟案例&#xff0c;只能原生重写&#xff0c;所以今天在网上为大家收集整理来几个…