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
<aura:component controller="MyTestMovieController">
<aura:handler name="init" value="{!this}" action="{!c.doInit}"/> <aura:attribute name="results" type="List" description="电影列表"/>
<aura:attribute name="count" type="Integer" default="0" description="电影记录数"/>
<div> <table id="mTable">
<thead>
<tr>
<th><div>电影名</div></th>
<th><div>导演</div></th>
<th><div>主演</div></th>
<th><div>主题曲</div></th>
<th><div>上映时间</div></th>
</tr>
</thead>
<tbody>
<aura:iteration items="{!v.results}" var="item">
<tr>
<td><div>{!item.Name}</div></td>
<td><div>{!item.Director__c}</div></td>
<td><div>{!item.To_Star__c}</div></td>
<td><div>{!item.Theme__c}</div></td>
<td>
<lightning:formattedDateTime value="{!item.Release_Time__c}" year="numeric" month="numeric" day="numeric" />
</td>
</tr>
</aura:iteration>
</tbody>
</table>
<div> </div>
<span style="float:right;">共{!v.count}条记录</span>
</div>
</aura:component>
其中的 “<aura:handler name="init" value="{!this}" action="{!c.doInit}"/>”调用了MyTest_MovieController.js中的doInit方法,其中"c"代表的
JS文件中的Controller,其中MyTest_MovieController.js文件如下
({
doInit : function(component, event, helper) { }
})
可以看到现在的doInit方法是空的,然后我们将MyTest_Movie添加到应用程序MyTest.app中进行查看,(Ctrl+Shift+A查看当前所有lightning组件)
<aura:application >
<c:MyTest_Movie />
</aura:application>
点击预览,界面如下
界面效果可以说是很简陋了,然后呢,我们在MyTest_Movie.css中添加一点点样式,设置全局默认字体大小与颜色,控制表格样式,看看CSS是如何控制这个页面显示的
.THIS {
font-size: 12px;
color:red;
}
.THIS table th{
border: 1px solid blue;
color:blue;
padding:15px;
border-width:1px 1px 1px 1px;
}
其中要注意的是,“.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
/*********
* Author:ricardo
* Time:2018-03-21
* Function:MyTest_Movie 后台控制类
* Test:
*/
public class MyTestMovieController{
//初始化
@AuraEnabled
public static List<Movie__c> GetAll(){
List<Movie__c> movieList = new List<Movie__c>();
movieList = [select ShowTime__c,ToStar__c,Theme__c,Director__c,Name from Movie__c limit 50];
return movieList;
}
}
接下来完善MyTest_MovieController.js
({
doInit : function(component, event, helper) {
helper.Init(component,event);
}
})
完善MyTest_MovieHelper.js
({
// 初始化加载
Init : function(component,event){
// 调用后台类
var action = component.get("c.GetAll");
// 设置回调函数
action.setCallback(this,function(response){
// 返回状态
var state = response.getState();
if(state == 'SUCCESS'){
var movieList = response.getReturnValue();
if(movieList == 0){
component.set("v.message",true);
}else{
component.set("v.message",false);
}
//参数传递
component.set("v.results",movieList); component.set("v.count",movieList.length);
}
});
// 队列处理
$A.enqueueAction(action);
}
})
此时初始页面就开发完成了,我们可以查看存储在系统中的电影列表了
到这里为止,我们从系统中获取数据,并显示在页面已经完成了(虽然页面丑的令人难以直视QAQ),那么接下来我们将回顾下这段代码中的运行流程。
不同于传统的MVC架构,Salesforce的lightning使用的架构是VCCM架构
数据从服务器的数据库(M)到页面(V)上被显示出来还经过了后台控制器(APEX Controller)与前端控制器(JAVASCRIPT Controller)两层控制。以上面的Movie为例
具体的运行过程如图所示,需要注意一点的是,APEX类中的方法需要与lightning组件进行交互,则必须加注解: @AuraEnabled
最后,对于这个简陋的页面,我们来使用一次lightning自带的样式库修饰一番
<aura:component controller="MyTestMovieController">
<aura:handler name="init" value="{!this}" action="{!c.doInit}"/> <aura:attribute name="results" type="List" description="电影列表"/>
<aura:attribute name="count" type="Integer" default="0" description="电影记录数"/>
<div> <table class="slds-table slds-table--bordered slds-table--cell-buffer">
<thead>
<tr class="slds-text-title--caps">
<th scope="col"><div class="slds-truncate">电影名</div></th>
<th scope="col"><div class="slds-truncate">导演</div></th>
<th scope="col"><div class="slds-truncate">主演</div></th>
<th scope="col"><div class="slds-truncate">主题曲</div></th>
<th scope="col"><div class="slds-truncate">上映时间</div></th>
</tr>
</thead>
<tbody>
<aura:iteration items="{!v.results}" var="item">
<tr>
<td><div class="slds-truncate">{!item.Name}</div></td>
<td><div class="slds-truncate">{!item.Director__c}</div></td>
<td><div class="slds-truncate">{!item.ToStar__c}</div></td>
<td><div class="slds-truncate">{!item.Theme__c}</div></td>
<td>
<lightning:formattedDateTime value="{!item.ShowTime__c}" year="numeric" month="numeric" day="numeric" />
</td>
</tr>
</aura:iteration>
</tbody>
</table>
<div> </div>
<span class="slds-size_small" style="float:right;">共{!v.count}条记录</span>
</div>
</aura:component>
最后要注意的一点是,给组件加上相关的样式后,在预览之前,要给MyTest.app继承lightning的样式库文件:extends="force:slds"
<aura:application extends="force:slds">
<c:MyTest_Movie />
</aura:application>
预览相关页面如下
总结:本篇主要介绍了component组件的基本开发,以及组件与后台之间的数据交互问题,有错误的地方欢迎指出,有疑问的欢迎在评论区留言
Salesforce Lightning开发学习(二)Component组件开发实践的更多相关文章
- amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules
amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...
- Java开发学习(二十八)----拦截器(Interceptor)详细解析
一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...
- Java开发学习(二十二)----Spring事务属性、事务传播行为
一.事务配置 上面这些属性都可以在@Transactional注解的参数上进行设置. readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true. timeout ...
- Java开发学习(二十四)----SpringMVC设置请求映射路径
一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...
- Java开发学习(二十五)----使用PostMan完成不同类型参数传递
一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发
一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...
- Android开发 QRCode二维码开发第三方框架
前言 Android开发里二维码开发经常用到,这里简单的介绍下Android开发里的二维码. 最广泛使用的二维码库zxing zxing是最广泛的二维码库各个平台都可以适用它,但是Android平台使 ...
- Swift开发学习(二):Playground
http://blog.csdn.net/powerlly/article/details/29674253 Swift开发学习:Playground 关于 对于软件用户.游戏玩家,大家一直都在提倡用 ...
随机推荐
- 如何禁止App在后台运行以及如何保存和恢复App的状态
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 如果禁止App在后台运行 iOS上的App类似于Windows ...
- request.setAttribute()怎么用的?
request.setAttribute()怎么用的? JSP1代码 String [] test=new String[2]; test[0]="1"; test[1]=&quo ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- Docker教程:使用docker配置python开发环境
http://blog.csdn.net/pipisorry/article/details/50808034 Docker的安装和配置 [Docker教程:docker的安装] [Docker教程: ...
- Android进阶(七)数据存储
Android 数据存储 1访问资源文件 直接将文件保存在设备的内部存储. 默认情况下,保存到内部存储的文件为私有的,其他应用程序不能访问它们,当用户卸载应用程序时,所保存的文件也一并删除. 1.1 ...
- Android Studio 1.0RC1版发布
Android Studio 1.0RC1 版本发布. 以下是官网该版本说明: Android Studio 1.0 Release Candidate 1 November 20th, 2014: ...
- UI设计——最后一根稻草
WindowsLive提供的本地地图服务看起来挺简单的,但其实非常难用: 跟其他人一样,每当我接触到一个新的地图服务,我做的第一件事总是拿当前的地址去试一试.我在上面输入的是我工作的地方.但是,当我敲 ...
- PageContext ServletContext ServletConfig辨析
上面三个东西都是什么关系呀? 先看图 注意几点 1 GenericServlet有两个init方法# 2 GenericServlet既实现了ServletConfig方法,它自己由依赖一个Servl ...
- SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法
1.SpringMVC中通过@ResponseBody.@RequestParam默认值,@PathVariable的用法 package com.kuman.cartoon.controller.f ...
- (NO.00002)iOS游戏精灵战争雏形(三)
在Sprite中新建Sprites文件夹,在其中添加Player.cc文件,确保其类型为Sprite. 将其Root节点的CCSprite的精灵帧设置为Image/sprite-2.png,然后打开物 ...