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

时间: 2024-10-11 00:36:23

Salesforce Lightning开发学习(二)Component组件开发实践的相关文章

Spring注解驱动开发(二)--组件注入

一.前言 上一篇我们搭建了一个简单的Spring项目,并简单的使用了 组件注册.这一篇中,我们来详细的讲解组件注入. 二.组件注入 1. @ComponentScan 在上一篇中,我们使用了@Configuration和@Bean实现了组件注入.但是如果需要注入的组件很多的情况下,每个组件都需要通过一个@Bean注解进行注入,这样就会很麻烦.所以Spring提供了@ComponentScan注解. @ComponentScan可以指定需要扫描的包,在这些包下,@Component注解标注的组件都

Swift开发学习(二):Playground

Swift开发学习:Playground 关于 对于软件用户.游戏玩家,大家一直都在提倡用户体验.其实软件开发者自己也是用户,是各种开发工具的使用者,也会喜欢用户体验做得好的工具软件.这次苹果想开发者所想,提供了一个可以玩转swift的游乐场--Playground,它为开发着提供了方便.提供了乐趣. 原文作者:Power 转载请保留此链接. Playground可以干什么 快速练习swift 不需要编译.不需要点击执行,编写代码后直接看效果 是不是比脚本语言还方便? 开发者可以通过Playgr

嵌入式linux QT开发(二)——QT开发环境搭建

嵌入式linux QT开发(二)--QT开发环境搭建 一.Windows系统QT开发环境搭建 操作系统:Windows 7 QT Creator:qt-creator-win-opensource-2.4.1 QT SDK:qt-win-opensource-4.7.4-mingw 1.安装QT Creator 点击qt-creator-win-opensource-2.4.1源程序安装. 2.安装QT SDK 点击qt-win-opensource-4.7.4-mingw源程序安装. 选择mi

Android开发学习二:编写Helloworld

学习视频 [中文Android开发视频教学].01_03_say_hello_to_Android.mp4 参考网址: http://www.open-open.com/lib/view/open1386252535564.html

微信小程序开发(二)-----云开发

1.概念 微信小程序的云开发是腾讯云与微信团队深度合作推出的一个全新的小程序的解决方案,它提供了云函数.云数据库与云存储这三大基础能力支持,随着云开发的出现,小程序的开发者可以将服务端的部署和运营的环节进行服务端的托管,让腾讯云去管理,而不需要在运维和管理方面投入太多的精力. 2.传统小程序开发与云开发的区别 小程序传统开发模式:(开发效率低.运维成本高) 对于小程序传统的开发模式而言,我们需要一个客户端(也就是前端页面),而前端页面展示的数据大多来自于数据库,因此我们还需要一个服务端,把后端的

基于GBT28181:SIP协议组件开发-----------第二篇SIP组件开发原理

上一节中讲的SIP组件,即GBT28181SipComponent动态.so库工程,生成libGBT28181SipComponent.so库文件和IGBT28181Comm.h编程接口,在该库中实现了REGISTER, MESSAGE,NOTIFY,SUBSCRIBE,INVITE,ACK,BYE,CALL_MESSAGE等GB/T28181-2011 <安全防范视频监控联网系统信息传输.交换.控制技术要求>要求的SIP方法, 后期有新的需求可以添加.该库已经成功用于电网的多家视频安防企业中

8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍

1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于在没有操作系统的裸机上直接操作硬件的,但对于大部分人来说,在8086裸机上直接进行编程将会面临各种困难.好在我们可以使用软件模拟器来模拟硬件进行8086的学习实践.在<汇编语言>中作者推荐通过windows环境下的masm和debug进行学习. masm介绍: masm是一款DOS下的汇编工具包,

Scala系统学习(二):Scala开发环境安装配置

Scala可以安装在任何基于UNIX/Linux或基于Windows的系统上.在您的机器上开始安装Scala之前,必须在计算机上安装Java 1.8或更高版本. 下面请按照以下步骤安装Scala. 步骤1:安装Java 首先,您需要在系统上安装Java软件开发工具包(SDK).要验证是否已经安装了Java,请根据您正在使用的操作系统平台,执行以下两个命令 - 对于Linux/Unix系统 - $java –version 对于Windows系统(打开命令提示符) - C:\Users\Admin

JFinal Web开发学习(二)目录、架构、package设计

package分类 config是JFinal的项目配置 controller是控制器 handler可以设置全局处理器,例如判断用户请求中是否直接请求 FreeMarker的模板文件ftl或者html的后缀,重定向到404 interceptor拦截器,例如后台admin的每项操作拦截判断admin是否有权限或者是否已经登录 model.base用于JFinal的Generator生成器自动生成数据库映射基础模型类 model用于继承基础模型类的dao操作 routes用于设置单独路由配置,例