ecomfe / bat-ria Goto Github PK
View Code? Open in Web Editor NEWRIA extensions for Brand Ads
RIA extensions for Brand Ads
RT。是不是跟局部刷新一样,也加上过滤查询参数较好?
关键代码点这里
现在我有个使用场景就涉及到这个问题了:
我的查询操作里有一级行业和二级行业,当点击查询按钮时,行业参数中使用新的参数名,当选择二级行业选择值时行业参数使用二级行业值,当选择二级行业全部行业选项时行业参数使用一级行业值。
如图:
支持xxx.JPG, xxx.PNG.
RT,ui里面的upload组件支持的是直接form的提交,而mockup里面的是需要通过ajax请求的数据才能被模拟,所以这两个是不能一块用吗?
var attrs = {
'class': command.className,
'title': command.title,
'data-command': command.type
};
可以考虑引入,或者单独弄个 repo。
我遇到了这样一个需求: 给导航栏添加图标,但是config中没有配置图标的功能。我查看源码发现由于navigator对text的值进行了escape的转义,没办法通过 text: "<i class="icon"></i> 首页"
的形式给导航添加图标,具体源代码如下:
element.innerHTML = '<a href="' + url + '"' + target + '>'
+ '<span>' + u.escape(item.text) + '</span>'
+ '</a>';
我觉得这里没必要进行转义,去掉反而可以留给开发更大的空间,谢谢!
需要用 ETpl 3.0 的带入引用功能重写模板,方便局部定制(包括脚手架生成的默认模板)。
需求:由于自己挖的坑(#70),data-ui-type和data-ui="type:xxx"都已经升级成支持主动提取ui依赖,那么我如果有自己定义的ui且不放在官方ui目录下怎么搞?(以前我用data-ui的写法来引用自定义的ui,用data-ui-type来引用官方ui)
我看bat-ria/tpl.js 里面有个registerControl,看了下注释,这是用来注册自定义不在esui目录下的控件。
有两个问题
define(function (require) {
// require template
require('bat-ria/tpl!./list.tpl.html');
var ListView = require('bat-ria/mvc/ListView');
var tpl = require('bat-ria/tpl');
tpl.registerControl('commom/MyUI');
情景:我提交form,提交失败的时候谈Dialog,这时候交点还在form,我按回车,又提交了一遍?
我们先内部讨论一下:
API 说明文档应该在开头部分对业务相关的词汇进行约定,给出一份供所有人参考的词汇表。
可以参考商业阿拉丁资源库接口文档的相应部分。
为了避免不同产品线对业务对象的增删改查等操作都使用不同词汇从而增加了沟通和维护的成本,在此对接口、Action路径中的常用操作和展现形式的语义进行明确,对类似含义的词汇进行合并。
create
/ update
共用,通过 id
参数是否存在来判断类型等)。对于查询类的操作,我们可以通过下面的方式来描述被查看内容的展现形式:
模块名 → 业务对象 → 修饰符 → 操作 / 展现方式
[/<module>]+/<entity>[/[<modifier>||<entity>]]*/[<operation>||<display>]
eg.
/promotion/ad/list
/promotion/material/daily/list
/validation/enterprise_qualification/create
/account/setting/modify
// 前端的修改入口,用 modify
比较合适统一前缀 → 模块名 → 业务对象 → 修饰符 → 操作 / 展现方式
/data[/<module>]+/<entity>[/[<modifier>||<entity>]]*/[<operation>||<display>]
注:前后端接口中的 ad
字样统一用 173
(0xAD
=== 173
)代替,以免请求被 AdBlock 等工具过滤。
eg.
/data/promotion/173/update
// 将修改提交到后端,统一用 update
/data/promotion/173/pie/chart
// 推广计划的饼图数据/data/promotion/material/daily/list
// 将物料信息按天统计成列表/data/promotion/material/save
// 仅保存物料/data/validation/enterprise_qualification/create
字符串也是true
Uploader功能增强
支持在url中传递参数,将callback放到url里边去,保证后端解析multipart
出错的情况下也能拿到callback
增加readonly
、disable
方法和状态、样式
各种中间状态可配置(可去除正在上传、上传完成等中间状态及样式)
增加撤销当前文件功能,包括置空input
内容,清空Uploader
对象缓存内容及状态
对后端返回的结构体增加content
,type
,width
,height
的提取
/* success */
{
"success": true,
"message": {},
"result": {
"previewUrl": "http://",
"url": "http://",
"content": "宝马,宝马新车,宝马旧车",
"type": "auto|image|falsh",
"width": 100,
"height": 100
}
}
/* failed */
{
"success": false,
"message": "含有非法字符/不正确的文件类型/宽度超出限制/高度超出限制/文件大小超出限制/其他出错信息"
}
增加extraArgs
的repaint
在以子 Action 方式加载后,列表页的局部刷新功能无法使用。原因是由于 action 的 reload
方法此时被拦截。
比如我需要editable功能,我需要在model里面set('edit', true);
edit这么大含义的一词就被他独占了
我知道这里先parse template,分析出依赖,才会读到properties,所以可能实现有点困难。
就是希望看看能否有更合理的方式,至少不要占用这么大概念的一个词
/**
* 或许当前已选择的数据
*
* @return {Object}
* @public
*/
TreeRichSelector.prototype.getSelectedTree = function () {
var me = this;
var copyData = u.deepClone(this.allData);
var nodes = copyData.children;
u.each(nodes, function (node) {
var selectedChildren = getSelectedNodesUnder(node, me);
if (selectedChildren.length) {
node.children = selectedChildren;
}
else {
node.children = null;
}
});
var filteredNodes = u.filter(nodes, function (node) {
return node.children;
});
copyData.children = filteredNodes;
return copyData;
};
function getSelectedNodesUnder(parentNode, control) {
var children = parentNode.children;
var indexData = control.indexData;
return u.filter(children, function (node) {
var indexItem = indexData[node.id];
return indexItem.isSelected;
});
}
看上面的函数getSelectedTree和getSelectedNodesUnder都只是找了一层,为啥不遍历子节点接着查找啊?
缺少.edpproject, module.conf这些配置文件和目录
--- a/dep/bat-ria/0.1.7/src/tpl.js
+++ b/dep/bat-ria/0.1.7/src/tpl.js
@@ -156,13 +156,18 @@ define(
require(dependencies, function () { load(text); });
}
- var options = {
- method: 'GET',
- url: parentRequire.toUrl(resourceId),
- cache: true,
- dataType: 'text'
- };
- ajax.request(options).then(addTemplate);
+ if ( /html?/.test( resourceId ) ) {
+ var options = {
+ method: 'GET',
+ url: parentRequire.toUrl(resourceId),
+ cache: true,
+ dataType: 'text'
+ };
+ ajax.request(options).then(addTemplate);
+ }
+ else {
+ require( [ resourceId ], addTemplate );
+ }
4个Rule:MaxRule/MinRule/MaxLengthRule/MinLengthRule
的prototype.getErrorMessage,第一行都是control.get('maxErrorMessage')
这个maxErrorMessage是否是copy手误?
另外4个getErrorMessage比较一致,是否可以抽取成一个,比如:
MaxRule.prototype.getErrorMessage = someMethod(control, 'maxErrorMessage');
MinRule.prototype.getErrorMessage = someMethod(control, 'minErrorMessage');
someMethod里面会return一个function。
函数内:
var getErrorMessage = Rule.prototype.getErrorMessage;
getErrorMessage.apply(this, arguments);
这个apply出来的,并没有赋给局部变量...是否可以存下来,最后一行return的时候,return此变量即可
class
max
项,选满后禁用其它项」(注意 max
和 value
的 repaint
也要更新)比如FooList
继承自ListAction
,如果写了initBehavior
,忘记调用ListAction
的initBehavior
,某些功能就缺失了
把业务相关的东西都移到具体项目里去,之后提供工具来生成。
extension
中的 hooks
main
中 session
/ constants
相关的接口需要抽象system/user
业务端系统在运行时报错的信息目前没有任何记录,可以考虑增强一下这方面的控制。
RT
支持操作项隐藏和禁用的配置
需要增加一个 navigator
模块,支持配置 Action path 和导航 Tab 的对应关系,并且在重定向或点击 Tab 时同步当前所在模块的显示。
目前异步加载之后不会执行Model.prepare,不符合预期
ListAction对url参数有依赖,但是在ListAction作为childAction的时候,无法修改parent的url,需要在redirect的时候把修改后的url通过事件抛出来。
RT, 求解
mvc/ListModel返回数据时未考虑接口返回失败情况,导致table初始化报错
可以对后端返回的数据格式data做一些修改
锦囊等系统中均有封装(基于 UEditor),ESUI 3 版本的控件也可考虑封装一下。
现在框架里面的API都需要通过提前定义而且只支持get和post的方法,如何支持put和delete以及动态路由呢?
为啥支持data-ui-type="Xxx"
不支持 data-ui="type:Xxx"
?
今天刚被坑,然后没有文档,跟了代码才发现。。
目前,在展示验证错误信息的时候,会取指定名字的一组控件的第一个控件显示验证错误信息。比如,有5个 TextBox 控件,名字都叫 names
,验证规则是不能存在两个相同的值,如果第一个 TextBox 和第二个 TextBox 都输入了zhangsan
,那么就会触发验证错误,然后错误会显示在第一个 TextBox 控件下面,后面控件不会变成出错的状态,参见此处代码。
目前期望尽量能做到在视觉上的最后一个控件旁边显示错误信息,值重复的两个 TextBox 边框飘红。
另外,对于 readonly 、 hidden 和 disabled 的控件是否需要不理会出错状态, @Justineo 大神在 JS Bin 上做了测试,原生的 input 对 readonly 和 disabled 是不会去设置验证不通过状态的,此处是具体示例。
企业百科目前实现的账户绑定有些问题,需考虑按贴吧推广之前用过的方式来做。
当需要自定义toastMessage时,getToastMessage方法在解析toastMessage后返回的是一个函数(u.template函数执行结果是一个函数),导致最终显示的是function() {}....
这儿样的。代码如下:
exports.getToastMessage = function (result) {
var message = this.toastMessage;
if (message == null) {
return '';
}
if (message) {
return u.template(message, result || {}); // 这里返回的是函数
}
else {
return '保存成功';
}
};
已经有了edpx-ub-ria
了,这样子直接可以用过edp ub-ria
来调用了,所以bat-ria
也需要搞一搞。
关于mockup常用路由规则及handler进bat-ria和结构优化的讨论
目前项目中的mockup的路由规则及handler都是直接堆在edp-websever-config.js
中,代码较长,路由规则难找。如图所示。
考虑到业务端的常用路由规则及handler的重用,计划整理一份公用handler到bat-ria中,之后通过脚手架生成一份常用的edp-websever-config.js
。
代码重用,保持edp-websever-config.js
清晰可读,业务端可在常用版本上自行扩展。
{
location: require('dep/ecma/locationAndHandler').uploadLocation,
handler: require('dep/ecma/locationAndHandler').uploadHandler
}
各业务端可根据业务需求修改location或使用其他handler。
/^\/data\//
及其handler,视为返回json的普通接口/^\/data.+upload$/
及其handler,视为上传文件的接口,返回htmlreferred是否有ed或enable_debug
,无ed默认转发至rd机器,有ed视为本地调试jsonp
目前项目中mockup的结构是与后端接口对应的,举个栗子
/data/bk/validation/delete
(我是一个普通的删除接口)
对应的mockup目录结构为
mockup/data/bk/validation/delete.js
目录层级居然有4层,创建到手疼。因此希望直接在mockup目录下有个mockup.js,路径的映射放到mockup.js里边做,不要依赖目录结构。
再举个栗子
/data/bk/personInfo/submit
(我是一个不需要返回任何result的接口)
上边两个接口的mockup是这样的
exports.response = function (path, params) {
return {
"success": "true",
"message": {},
"result": {
}
};
}
这两个文件是一模一样的,但是由于还没有公用的方法,暂时只能copy & paste一次
减少mock一个接口的工作量,一个接口可以重用同一个json串返回
see #50
问题罗列如下:
tr
从未被用到过;innerHTML
设为 title ;field.width
参数在此控件中无用。支持如下形式的图片路径:
http://bj.bcebos.com/v1/cae-private/baike-license-file/brokenFile.jpg?authorization
=bce-auth-v1%2Fb6ddca7c7cd747c08b194229174feeb0%2F2016-03-10T02%3A04%3A34Z%2F-1%2F%2F45e90dcfa9964d9634b81c84d15e7db554807deff13a499543cc9b397422e09c
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.