jQuery MiniUI

标题: 为什么得不到这个对象? [打印本页]

作者: 常常    时间: 2012-10-25 18:09:54     标题: 为什么得不到这个对象?

<title>办公用品申请</title>
    <link href="${ctx}/MINIUI/demo.css" type="text/css" rel="stylesheet" />
    <script src="${ctx}/MINIUI/scripts/jquery-1.6.2.min.js" type="text/javascript"></script>
    <script src="${ctx}/MINIUI/scripts/miniui/miniui.js" type="text/javascript"></script>
    <link href="${ctx}/MINIUI/scripts/miniui/themes/default/miniui.css" rel="stylesheet" type="text/css" />
    <link href="${ctx}/MINIUI/scripts/miniui/themes/icons.css" rel="stylesheet" type="text/css" />

    <style type="text/css">
      #aaa { text-decoration:none;color:#000000;}
      #aaa:hover { color:#f00;}
    </style>
</head>
<body>
<div class="page-holder">
<div class="title_default_mod ">
<h2 class="title_left ">
  <b class="tit1">办公用品申请</b>
</h2>
</div>

<table width="100%" border="0" cellspacing="0" cellpadding="0" class="show_rows" align="center" >   
<tr>
    <th width="15%">申请人:<input type="hidden" id="flag"  value="<%=flag%>" /></th>
    <td width="35%"> <input id="applyUser"  name="applyUser" class="mini-textbox" value="<%=userName %>" allowInput="false" /></td>
    <th width="15%">申请日期:</th>
    <td width="35%"><input id="applyDate"  name="applyDate" class="mini-textbox" value="<%=str_date %>" allowInput="false" /></td>
</tr>
<tr>
    <th width="15%">申请部门:<input type="hidden" id="applyDept" name="applyDept" value="<%=orgOfUser%>" /></th>
    <td colspan="3"> <input name="deptName"  class="mini-combobox" data="deptNames" value="1" textField="text"  valueField="id" />
    </td>
</tr>
</table>

<p style="margin-top:2px; margin-bottom:2px;">办公用品:</p>

    <div id="datagrid1" class="mini-datagrid" style="width:100%;height:280px;"
            url="${ctx }/JsonDispatchAction.do?efFormEname=BMWF013&serviceName=BMWF010&methodName=queryStationeryApply" idField="guid"
            allowResize="true" pageSize="10"
            allowCellEdit="true" allowCellSelect="true" multiSelect="true"   
        >
        <div property="columns">
            <div width="5%" type="indexcolumn" >序号</div>
            
            <div field="typeId" id="typeId" class="mini-combobox"  width="25%"  headerAlign="center" >办公用品分类
                <input property="editor" class="mini-combobox" id="StationeryType"  textField="typeName" valueField="guid"
                      />               
            </div>
            
            <div field="materialId"  class="mini-combobox"   width="25%" headerAlign="center" >办公用品
                <input property="editor" class="mini-combobox" id="materialId" textField="stationeryName" valueField="guid"
                     url="${ctx}/BM/WF/bgtypeliandong.jsp?typeId=39e4d3473b61435d93716bb61bd6035a" />               
            </div>
            <div field="amonut"   width="10%" allowSort="true" >数量
                <input property="editor" id="i-0-amonut" class="mini-spinner" minValue="0" />
            </div>        
            <div field="StationeryUnit" width="10%" headerAlign="center" allowSort="true" >单位
            </div>
            <div field="applyDesc"  width="25%" headerAlign="center">备注
                <input property="editor" id="applyDesc" class="mini-textarea" minHeight="80"/>
            </div>                     
        </div>
  </div>
  
<p align="right" style="margin-top:10px;">
    <a class="mini-button">新增明细</a><span style="width:5px;">&nbsp;</span>
    <a class="mini-button">草稿</a><span style="width:5px;">&nbsp;</span>
    <a class="mini-button" >送批</a><span style="width:5px;">&nbsp;</span>
    <a class="mini-button" >返回</a></p>


</div>

<script type="text/javascript">
        var deptNamestr = $("#applyDept").val();
        var deptNames = [{ id: 1, text:deptNamestr}];
        
        mini.parse();
        var grid = mini.get("datagrid1");

        var StationeryType = mini.get("StationeryType");
        alert("StationeryTy23235351="+StationeryType);
</script>
结果为:[attach]825[/attach]

问题:为什么得不到这个对象?(需要这个对象去调用load()方法加载数据)


作者: factory    时间: 2012-10-26 09:13:57

有没有处于编辑状态?
编辑器在非编辑状态的时候是不会被创建的,当然得不到了
作者: 常常    时间: 2012-10-26 10:28:39

factory 发表于 2012-10-26 09:13
有没有处于编辑状态?
编辑器在非编辑状态的时候是不会被创建的,当然得不到了 ...

有没有设置“编辑器”状态的字段? 我需要根据不同的登录状态加载不同的初始信息
作者: factory    时间: 2012-10-26 10:40:17

常常 发表于 2012-10-26 10:28
有没有设置“编辑器”状态的字段? 我需要根据不同的登录状态加载不同的初始信息 ...

只是加载不同单元格的数据,你可以用updateRow ( row, rowData )来更新数据,不需要获得编辑器,再去改变单元格数据
作者: 常常    时间: 2012-10-26 10:53:25

factory 发表于 2012-10-26 10:40
只是加载不同单元格的数据,你可以用updateRow ( row, rowData )来更新数据,不需要获得编辑器,再去改变 ...

我现在要实现这样的效果:
1.“办公用品分类”和“办公用品”是二级联动的
2.如果用户在数据库没有记录,就默认加载数据,其中“办公用品分类”默认选择“打印复印纸”,“办公用品”也是可选的,默认值是一个提示信息“--请输入办公用品--”
3.如果用户在数据库有记录,就将数据加载出来。其中“办公用品分类”和“办公用品”为数据库字段,并且两列可以编辑修改的。

望解决,甚急!
作者: 常常    时间: 2012-10-26 10:58:46

本帖最后由 常常 于 2012-10-26 11:00 编辑
factory 发表于 2012-10-26 10:40
只是加载不同单元格的数据,你可以用updateRow ( row, rowData )来更新数据,不需要获得编辑器,再去改变 ...

补充:
[attach]831[/attach][attach]833[/attach]

作者: factory    时间: 2012-10-26 11:15:41

常常 发表于 2012-10-26 10:58
补充:


你监听oncellbeginedit事件,就是当你在编辑的时候,再去根据用户的不同,来加载combobox的默认值,
oncellbeginedit=“oncellbeginedit”
function oncellbeginedit(e){
e.editor  //当前编辑的单元格的编辑器对象
}
作者: 常常    时间: 2012-10-26 13:00:19

factory 发表于 2012-10-26 11:15
你监听oncellbeginedit事件,就是当你在编辑的时候,再去根据用户的不同,来加载combobox的默认值,
once ...


        <div id="datagrid1" class="mini-datagrid" style="width:100%;height:280px;"
                url="${ctx }/JsonDispatchAction.do?efFormEname=BMWF013&serviceName=BMWF010&methodName=queryStationeryApply" idField="guid"
                allowResize="true" pageSize="10"
                allowCellEdit="true" allowCellSelect="true" multiSelect="true"   
            >
        <div property="columns">
            <div width="5%" type="indexcolumn" >序号</div>
            
            <div field="typeId" id="typeId" class="mini-combobox"  width="25%"  headerAlign="center" >办公用品分类
                <input property="editor" class="mini-combobox" id="StationeryType"  textField="typeName" valueField="guid"
                                 url="${ctx}/BM/WF/bgtypeload.jsp"  onvaluechanged="liandong();"/>               
            </div>
                       
                        <div field="materialId"  class="mini-combobox"   width="25%" headerAlign="center" >办公用品
                <input property="editor" class="mini-combobox" id="materialId" textField="stationeryName" valueField="guid"
                                        oncellbeginedit=“oncellbeginedit”  onvaluechanged="liandong2();" />               
            </div>
                        <div field="amonut"   width="10%" allowSort="true" >数量
                <input property="editor" id="i-0-amonut" class="mini-spinner" minValue="0" />
            </div>        
            <div field="StationeryUnit" width="10%" headerAlign="center" allowSort="true" >单位
            </div>
            <div field="applyDesc"  width="25%" headerAlign="center">备注
                <input property="editor" id="applyDesc" class="mini-textarea" minHeight="80"/>
            </div>                     
        </div>
  </div>
事件没有得到响应。
并且:我要的效果不是去编辑单元格时才加载,而是页面加载的时候就加载了。(即提供给用品一张申请单,其中“办公用品分类”和“办公用品”都有默认值了)
作者: 常常    时间: 2012-10-26 13:01:31

factory 发表于 2012-10-26 11:15
你监听oncellbeginedit事件,就是当你在编辑的时候,再去根据用户的不同,来加载combobox的默认值,
once ...


        <div id="datagrid1" class="mini-datagrid" style="width:100%;height:280px;"
                url="${ctx }/JsonDispatchAction.do?efFormEname=BMWF013&serviceName=BMWF010&methodName=queryStationeryApply" idField="guid"
                allowResize="true" pageSize="10"
                allowCellEdit="true" allowCellSelect="true" multiSelect="true"   
            >
        <div property="columns">
            <div width="5%" type="indexcolumn" >序号</div>
            
            <div field="typeId" id="typeId" class="mini-combobox"  width="25%"  headerAlign="center" >办公用品分类
                <input property="editor" class="mini-combobox" id="StationeryType"  textField="typeName" valueField="guid"
                                 url="${ctx}/BM/WF/bgtypeload.jsp"  onvaluechanged="liandong();"/>               
            </div>
                       
                        <div field="materialId"  class="mini-combobox"   width="25%" headerAlign="center" >办公用品
                <input property="editor" class="mini-combobox" id="materialId" textField="stationeryName" valueField="guid"
                                        oncellbeginedit=“oncellbeginedit”  onvaluechanged="liandong2();" />               
            </div>
                        <div field="amonut"   width="10%" allowSort="true" >数量
                <input property="editor" id="i-0-amonut" class="mini-spinner" minValue="0" />
            </div>        
            <div field="StationeryUnit" width="10%" headerAlign="center" allowSort="true" >单位
            </div>
            <div field="applyDesc"  width="25%" headerAlign="center">备注
                <input property="editor" id="applyDesc" class="mini-textarea" minHeight="80"/>
            </div>                     
        </div>
  </div>

oncellbeginedit事件没有得到响应。
并且:我要的效果不是去编辑单元格时才加载,而是页面加载的时候就加载了。(即提供给用品一张申请单,其中“办公用品分类”和“办公用品”都有默认值了)
作者: factory    时间: 2012-10-26 13:37:37

常常 发表于 2012-10-26 13:01
序号
            
            办公用品分类

oncellbeginedit事件是表格事件,要写在表格上面的。
你的表格单元格的值是多少,弹出下拉框的时候回默认选中这条数据的。
比如你的表格一开始默认的值是 鼠标,那么编辑时候的combobox也是这个值的。这个你可以去看 单元格编辑 示例 的国家这一列。默认单元格是日本,那么你编辑的时候,combobox值就是日本
如果你要操作编辑器,你只能编辑的时候才能获取到。
如果是表格单元格的不同内容,你完全可以根据不同用户,在后台处理好,返回不同的数据就可以了
作者: 常常    时间: 2012-10-26 14:22:27

factory 发表于 2012-10-26 13:37
oncellbeginedit事件是表格事件,要写在表格上面的。
你的表格单元格的值是多少,弹出下拉框的时候回默认 ...

<div field="materialId"  class="mini-combobox"  width="25%" headerAlign="center" >办公用品
                <input property="editor" class="mini-combobox" id="materialId" name="materialId" textField="stationeryName" valueField="guid"
                                            onvaluechanged="liandong2();" />               
            </div>
                        <div field="amonut"   width="10%" allowSort="true" >数量
                <input property="editor" id="i-0-amonut" class="mini-spinner" minValue="0" />
            </div>        
            <div field="StationeryUnit" renderer="onActionRenderer" width="10%" headerAlign="center" allowSort="true" >单位
            </div>
function onActionRenderer(e) {
                var grid = e.sender;
                var record = e.record;
                var rowIndex = e.rowIndex;
            var typeId = record.typeId;
            var materialId = record.materialId;
            alert("typeId="+typeId);
                alert("materialId="+materialId);
                var aa = mini.get("materialId");
          
                alert("a2323="+aa);
               return materialId;
             
            }
请问一下我是什么还是得不到 mini.get("materialId")这个对象?我想得到对象然后根据判断为它加载不同的数据
作者: factory    时间: 2012-10-26 14:35:03

常常 发表于 2012-10-26 14:22
办公用品
                                
            

function oncellbeginedit(e){
e.editor  //当前编辑的单元格的编辑器对象
}
如果你是用oncellbeginedit事件的,你就这样获取编辑器对象。
或者你点击单元格,然后他处于编辑状态了,再用mini.get()来获取
作者: 常常    时间: 2012-10-26 14:43:50

factory 发表于 2012-10-26 14:35
function oncellbeginedit(e){
e.editor  //当前编辑的单元格的编辑器对象
}

oncellbeginedit(e)事件加在这里没有反应,我换成了onActionRenderer(e) 事件?
function onActionRenderer(e) {
                var grid = e.sender;
                var record = e.record;
                var rowIndex = e.rowIndex;
            var typeId = record.typeId;
            var materialId = record.materialId;
            alert("typeId="+typeId);
                //alert("materialId="+materialId);
                var bb = e.editor
                alert("bb="+bb)
                var aa = mini.get("materialId");
          
                alert("232443="+aa);
               return materialId;
             
            }
var aa = mini.get("materialId");对象还是获取不到!
作者: factory    时间: 2012-10-26 14:54:06

常常 发表于 2012-10-26 14:43
oncellbeginedit(e)事件加在这里没有反应,我换成了onActionRenderer(e) 事件?
function onActionRende ...

<div class="mini-datagrid"  oncellbeginedit="cellbeginedit"></div>

function cellbeginedit(e){
    e.editor
}
作者: 常常    时间: 2012-10-26 15:08:59

factory 发表于 2012-10-26 14:54
function cellbeginedit(e){
    e.editor
}

好像可以了
  //根据登录人和“办公用品分类”加载“办公用品”列表
        function cellbeginedit(e){
        
           var editor = e.editor
           var grid = e.sender;
               var record = e.record;
               var rowIndex = e.rowIndex;
               
           var typeId = record.typeId;
           //alert("typeId="+typeId);
           var materialObj = mini.get("materialId");
           materialObj.load("${ctx}/BM/WF/bgtypeliandong.jsp?typeId="+typeId);
           //alert("加载对应的办公用品完成");
        }
但是这样的话,没点击一次表格就调用一次这个函数。用户会感觉很卡
能不能只有当用户点击“办公用品”这一列的时候才调用这个函数???
作者: 常常    时间: 2012-10-26 15:17:14

常常 发表于 2012-10-26 15:08
好像可以了
  //根据登录人和“办公用品分类”加载“办公用品”列表
        function cellbeginedit(e){ ...

知道了 做个判断就可以了

麻烦“factory”了
谢谢




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