jQuery MiniUI

标题: datagrid的drawcell链接丢失问题 [打印本页]

作者: natty7456    时间: 2012-9-6 12:14:32     标题: datagrid的drawcell链接丢失问题

本帖最后由 natty7456 于 2012-9-6 13:07 编辑

<input id="b1" type="button"  value="查询" />   

   function toSearch() {
        var lotno = $(".classlotno").val().trim();

        if ($.trim(lotno).length == 0) {
            alert("请输入LotNo!");
            return;
        }

        mini.parse();

        var grid = mini.get("datagrid1");

        grid.url = "AjaxHandler/Service.ashx?method=TrackResult_byLotNo&lotno=" + lotno;

        grid.load();

        grid.on("drawcell", function (e) {
            var record = e.record,
                column = e.column,
                field = e.field,
                value = e.value;

              if (field == "BatchCode") {
                    e.cellHtml = '<a href="javascript:gotoTrack(\'' + value + '\')">' + value + '</a>';
                }
            }
        })

"查询"按钮上调用toSearch(),点击完“查询”按钮之后,drawcell出超级链接没有能够正确显示出来,第二次点击后显示正常。

请问是我写的方法错了,还是顺序错了?


作者: factory    时间: 2012-9-6 14:19:27

1.你的 grid.url = "AjaxHa....";这样写是错误的,miniui的所有属性都是使用setUrl();这样的set方式赋值.取值也是使用get的方式,getUrl();
2.drawcell的事件是在表格单元格绘制的时候触发,所以你要在点击按钮后,显示超链接,你可以在toSearch里面grid.reload()刷新下表格.
作者: natty7456    时间: 2012-9-6 15:11:26

http://www.miniui.com/docs/api/index.html#ui=datagrid

里面没有提到有setUrl的方法

开始界面datagrid上面是空的,当我点击查询的时候才输入数据,toSearch里面怎么加grid.reload法?
作者: factory    时间: 2012-9-6 15:17:01

natty7456 发表于 2012-9-6 15:11
http://www.miniui.com/docs/api/index.html#ui=datagrid

里面没有提到有setUrl的方法


miniui的属性,基本都是支持set和get方法的.所以没写
如果一开始为空,点击查询再加载数据,那么你应把设置URL和load()方法写在查询方法里
代码如下:
  1. function toSearch() {

  2.             grid.setUrl("AjaxHandler/Service.ashx?method=TrackResult_byLotNo&lotno=" + lotno);
  3.             grid.load();
  4.             grid.on("drawcell", function (e) {
  5.                 var record = e.record,
  6.                     column = e.column,
  7.                     field = e.field,
  8.                     value = e.value;

  9.                 if (field == "BatchCode") {
  10.                     e.cellHtml = '<a href="javascript:gotoTrack(\'' + value + '\')">' + value + '</a>';
  11.                 }
  12.             })
  13.             
  14.         }
复制代码
由于你已经在点击的时候gird.load()数据,绘制单元格,激发了ondrawcell事件,所以不需要再reload()刷新了
作者: natty7456    时间: 2012-9-6 15:46:57

对啊,我开始就是这么写的,但是发生的问题是:

“"查询"按钮上调用toSearch(),点击完“查询”按钮之后,drawcell出超级链接没有能够正确显示出来,第二次点击后显示正常。”

求解决方法
作者: factory    时间: 2012-9-6 16:10:02

natty7456 发表于 2012-9-6 15:46
对啊,我开始就是这么写的,但是发生的问题是:

“"查询"按钮上调用toSearch(),点击完“查询”按钮之后,d ...

不会的,我是测试过的才贴的代码给你,是可以点击查询加载进来,马上绘制出来的.
我建议你这样先放个最简单的页面,就一个表格,单独测试这个方法
作者: natty7456    时间: 2012-9-7 09:13:11

本帖最后由 natty7456 于 2012-9-7 09:16 编辑

我刚以为自己领悟了。

grid.load();和 grid.on("drawcell", function (e) {})这两句话的顺序反了。

因为先要绑定drawcell事件,在load的时候绘制才会触发,我纳闷上面怎么是怎么出来的...

经过测试发现还是不行,是asp.net编译之后第一次运行的时候,出不来链接

作者: factory    时间: 2012-9-7 09:34:12

natty7456 发表于 2012-9-7 09:13
我刚以为自己领悟了。

grid.load();和 grid.on("drawcell", function (e) {})这两句话的顺序反了。

我在本地运行是没问题的,而且官网上的示例drawcell是正常的.
建议你给个静态数据和静态页面,把2个一起打包上传,我给你看下
作者: windsix    时间: 2012-9-7 12:36:26

natty7456 发表于 2012-9-7 09:13
我刚以为自己领悟了。

grid.load();和 grid.on("drawcell", function (e) {})这两句话的顺序反了。

晕,手动事件绑定当然要在第一次load之前了,否则在这个load的时候是没有那个事件,当然就不会出来了,而且这种绑定事件也应该只绑定一次呀

在页面初始化时绑定这个事件,然后再去调用你search的逻辑去load数据。
作者: natty7456    时间: 2012-9-7 15:40:25

windsix 发表于 2012-9-7 12:36
晕,手动事件绑定当然要在第一次load之前了,否则在这个load的时候是没有那个事件,当然就不会出来了,而 ...

   function toSearch() {
        var lotno = $(".classlotno").val().trim();

        if ($.trim(lotno).length == 0) {
            alert("请输入LotNo!");
            return;
        }

        mini.parse();

        var grid = mini.get("datagrid1");

        grid.url = "AjaxHandler/Service.ashx?method=TrackResult_byLotNo&lotno=" + lotno;

        grid.load();
}

注意看,我在页面初始化时候,lotno的TextBox里面还没有值,这个是用户在点搜索之前填写进去的

但是gird的url必须要先设定后,才能load,不然也会报错的。

所以无法再页面初始化的时候绑定drawcell的事件
作者: niko    时间: 2012-9-7 19:36:24

无法发现drawcell事件无法激发。
你先基于DEMO示例,然后改造url地址,试试。
作者: windsix    时间: 2012-9-9 21:21:52

natty7456 发表于 2012-9-7 15:40
function toSearch() {
        var lotno = $(".classlotno").val().trim();

绑定事件在什么时候有啥关系,关键是load之前必须把相关事件绑定好,对一个对象来说只要绑定过一次事件就可以了,又不用再每次查询时都去绑定。

至于有没有url跟绑定事件之间又没有关系,你可以在任何触发该事件之前绑定好就可以了。
作者: niko    时间: 2012-9-10 09:42:50

windsix看来用的不错了啊。




欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2