Clingingboy

<developer name=’'clingingboy">
<i:Interaction.Behaviors>
<clingingboy:madeControlBehavior />
</i:Interaction.Behaviors>
</developer>

博客园 首页 新随笔 联系 订阅 管理
  211 Posts :: 1 Stories :: 1439 Comments :: 484 Trackbacks

      越来越多的js供我们来选择,在使用过程中插件会提供一个数据给我们进行填充.现在大部分的数据格式都是为json.这个格式就需要后端开发人员提供给前端了.web的软件无非就是后端给前端数据,然后前端再转数据类型.然而这个转换该如何来做?

矛盾的产生:

1.前端的一个插件,下面以一个简单的jQuery插件为例子,这个方法可以帮助你为一个select标签添加项

Code

 

作为这个插件的开发者,感觉这个方法很完美.它要求json的传进来的格式是这样的.

Code

 

然后我告诉后端开发人员,"你只要给我上面的格式就可以了".

这个时候插件的开发者并没有意识到这个世界上的数据接口并不是他说了算的,后端有着其自己的业务逻辑.

现在假设我要显示一个后端为Employee的列表

Code

 

作为后端人员,最简单的做法如下

Code

 

问题是Employee的属性不符合前端插件的要求.还好c# 3.0有匿名对象.还可以解决这个问题.现在更改后如下

Code

 

后来后端人员发现,这样的情况实在太多了,好好的一个Employee对象,里面的属性全变成text,value,selected了...

这里便出现了矛盾,前端的接口也可以根据后端来定的。即数据也可以这样的

Code

 

前端的开发者妥协了,无奈还是接收上面的数据.然后做了一个循环,把数据转成符合插件接口的数据.

 

 

Code

 

这样的做法并不好,为了用插件在循环,数据量大了就见的出来了.当然我们的目标还是需要转换数据的,这个转换确实应该前端来做,但我们要换个方法.

二.事件回调,格式化数据

改进插件的使用方法,在添加dom之前,格式化数据.现在插件代码如下,添加了一个formatEvent方法

Code

 

插件使用方法

 

Code

 

ok,这样问题就解决了,这种方式在很多地方都可以使用.小小技巧,分享一下.

posted on 2008-10-09 12:07 Clingingboy 阅读(2600) 评论(14)  编辑 收藏 网摘 所属分类: A Asp.net技术

Feedback

#1楼 2008-10-09 12:18 有容乃大      
不错哦,感谢分享.

-----------------------------------------------
.net项目开发工具(V3.0 ):
http://www.cnblogs.com/mrhgw/archive/2008/08/06/1261664.html" target="_new">http://www.cnblogs.com/mrhgw/archive/2008/08/06/1261664.html
http://www.mrhgw.cn" target="_new">http://www.mrhgw.cn

  回复  引用  查看    

#2楼 2008-10-09 12:25 Gray Zhang      
很明显,应该由前端来做调和,因为前端放出的是API,API应该给人最大的自由
参考数据绑定控件吧,有DataFieldName和ValueFieldName这样的参数,前端做的时候应该也提供这种程度的灵活性,况且在JS这种语言里,都用不着反射,因此我觉得应该这样的接口:
$.fn.setSelect = function(data, textField, valueField){
var self = this;
self.empty();
$.each(data, function(i){
var oOption = document.createElement("option");
oOption.innerText = this[textField];
oOption.value = this[valueField];
oOption.selected = this.selected;
self[0].appendChild(oOption);
});
}

  回复  引用  查看    

#3楼[楼主] 2008-10-09 12:43 Clingingboy      
@Gray Zhang
这里需要在给对象还是给属性中选择,下面属性没有给到哦,如果需要的属性比较多的话,还是传对象比较好.而且传对象比传属性更加的灵活.
oOption.selected = this.selected;

  回复  引用  查看    

#4楼 2008-10-09 12:56 旧学前      
@Gray Zhang
是这个道理,绑定控件的惯例用法。

  回复  引用  查看    

#5楼[楼主] 2008-10-09 13:03 Clingingboy      
其实数据绑定也不一定灵活,如DropDownList,给我DataFieldName和ValueFieldName,我想格式化数据的话,绑定就做不到了.只考虑了数据的获取,但没考虑ui呈现的样式方案.
  回复  引用  查看    

#6楼 2008-10-09 13:20 Gray Zhang      
@Clingingboy
那就再加几个上去,比如
DataFormat = "显示的样式,当前应该显示{0}"
ValueFormat = "值的样式,当前值是{0}"

其实灵活性的关键是能不能想到

  回复  引用  查看    

#7楼[楼主] 2008-10-09 13:31 Clingingboy      
@Gray Zhang
如果显示项需要显示两个绑定字段的数据呢?
DataFieldName只能一个

  回复  引用  查看    

#8楼 2008-10-09 13:35 Gray Zhang      
@Clingingboy
把DataFieldName的类型变成数组,同时DataFormat中可以用{0},{1},{2}等,和DataFieldName传入的值的数量一样
ValueFieldName也同样方法设计 当然到时候后台怎么再加载回去这样的字符串又是另外一个问题了

  回复  引用  查看    

#9楼[楼主] 2008-10-09 13:58 Clingingboy      
@Gray Zhang
是噢,呵呵,其实这一系列的问题,不如开放给用户自己设置,封装就意味着失去了灵活性.各有各的好了

  回复  引用  查看    

应该由前端来做,定义良好的接口属性符合SOA的宗旨~比返回一堆的text/value要好~ 至于怎么做那就随意发挥了
  回复  引用  查看    

#11楼 2008-10-09 23:20 soladed[未注册用户]
list泛型对象有ToJson()方法吗?

  回复  引用    

#12楼[楼主] 2008-10-10 00:12 Clingingboy      
@soladed
扩展方法:)

  回复  引用  查看    

#13楼 2008-10-10 11:41 老头      
@有容乃大
你的宣傳已經夠多的了,大家都知道了.如果真得好叫cnblogs推荐一下,象nbear更讓人信服,不過cnblogs推荐的東西首先應該是開源的,你的工具我看過,很漂亮也很強大,但這樣有廣告的嫌疑!

  回复  引用  查看    

#14楼 2008-10-10 19:56 lexus      
似乎讲json的文章很少,写得相当的不错啊,继续努力写啊
  回复  引用  查看    

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1307116




相关文章:

相关链接: