找回密码
 立即注册

QQ登录

只需一步,快速开始

tianqing01

注册会员

4

主题

20

帖子

104

积分

注册会员

积分
104
最新发帖
tianqing01
注册会员   /  发表于:2017-3-21 15:29  /   查看:7477  /  回复:14
想问一下表单事件绑定以下两种方式有什么区别么1.$("#ss").data("spread").getActiveSheet().bind($.wijmo.wijspread.Events.ValueChanged, function(e, info) {……}
2.activeSheet = $("#ss").wijspread("spread").getActiveSheet();
activeSheet.bind(GcSpread.Sheets.Events.ClipboardPasting, function (sender, args) {……}


我在同一个表单进行多个事件绑定时使用多个第二种情况的绑定,会出现部分成功,部分失败的情况;
具体为顺序为:
$("#ss").data("spread").getActiveSheet().bind($.wijmo.wijspread.Events.ValueChanged, function(e, info) {……}
//activeSheet.bind(GcSpread.Sheets.Events.DragFillBlock, function (e, info) {……) ①
//activeSheet.bind(GcSpread.Sheets.Events.DragFillBlockCompleted, function (e, info) {……} ①
$("#ss").data("spread").getActiveSheet().bind($.wijmo.wijspread.Events.DragFillBlock, function (e, info) {……) ②
$("#ss").data("spread").getActiveSheet().bind($.wijmo.wijspread.Events.DragFillBlockCompleted, function (e, info) {……} ②

activeSheet.bind(GcSpread.Sheets.Events.ClipboardPasted, function (sender, args) {……}
activeSheet.bind(GcSpread.Sheets.Events.ClipboardPasting, function (sender, args) {……}

如果版本①,则这两个事件没法实现绑定,但是之后的paste事件能实现绑定,使用版本②,则所有时间都可以实现绑定
因为版本①是目前api中使用的,所以不是很清楚这有什么使用功能上的区分

具体使用的版本为spreadjs - 9.40.20153.0

14 个回复

倒序浏览
tianqing01
注册会员   /  发表于:2017-4-1 10:08:56
来自 14#
tianqing01 发表于 2017-4-1 10:01
改用绑定到spread上
$("#ss").wijspread("spread").bind(GcSpread.Sheets.Events.DragFillBlock, functi ...

事件绑定在sheet上和spread上有什么具体区别

同时在加载时我是先导入json串
spread = $("#ss").wijspread("spread");
// 对excel中的表格初始加载 && 样式进行设置及控制
activeSheet = getSheetTab(spread, "activeSheet"); // get active worksheet
spread.fromJSON(JSON.parse(jsonStr));//导入json
//修改后的表单单元格值绑定事件
var cellChanged = GcSpread.Sheets.Events.CellChanged;
spread.bind(cellChanged, function (e, info) {            ……        });
                               
var dragFillBlock = GcSpread.Sheets.Events.DragFillBlock;
spread.bind(dragFillBlock, function (e, info) {        ……         });

var dragFillBlockCompleted = GcSpread.Sheets.Events.DragFillBlockCompleted;
spread.bind(dragFillBlockCompleted, function (e, info) {       ……        });

这种情况下事件都会执行两遍

如果改成绑定到sheet上,会出现绑定事件未执行的情况
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-21 17:19:58
沙发
本质上没有区别。

可能存在的差别是版本①获取到的始终是当前的ActiveSheet. 而版本② 中的activeSheet始终引用的是当时赋值的的那个sheet,如果您切换了sheet,那么想要当前sheet操作需要重新给activeSheet 赋值。
回复 使用道具 举报
tianqing01
注册会员   /  发表于:2017-3-22 15:03:52
板凳
dexteryao 发表于 2017-3-21 17:19
本质上没有区别。

可能存在的差别是版本①获取到的始终是当前的ActiveSheet. 而版本② 中的activeSheet ...

按照您这样的解释,我认为不应该存在目前我遇到的对同一个sheet页而言两种情况--情况①绑定失败情况②绑定成功,出现这种情况的原因您能具体解答么
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-22 16:47:45
地板
理论上 您已经设置 activeSheet = $("#ss").wijspread("spread").getActiveSheet() 所以他们是完全一样的。
具体可能需要您提供一个能重现的Demo我这里跟一下。

我这里测试一下两种写法都没有问题
$("#ss").data("spread").getActiveSheet().bind($.wijmo.wijspread.Events.ClipboardPasted, function (e, info) {console.log("ClipboardPasted")} )

$("#ss").data("spread").getActiveSheet().bind(GcSpread.Sheets.Events.ClipboardPasting, function (e, info) {console.log("ClipboardPasting")} )

评分

参与人数 1满意度 +5 收起 理由
tianqing01 + 5 很给力!

查看全部评分

回复 使用道具 举报
tianqing01
注册会员   /  发表于:2017-3-24 09:42:00
5#
dexteryao 发表于 2017-3-22 16:47
理论上 您已经设置 activeSheet = $("#ss").wijspread("spread").getActiveSheet() 所以他们是完全一样的。 ...

想问一下能不能提供一个咱们spreadjs属性比较全的json结构,因为目前我们很多都是一个个添加,比较麻烦,但是没有有地方可以找到,所以想请您这边给提供一份
回复 使用道具 举报
tianqing01
注册会员   /  发表于:2017-3-24 09:42:05
6#
dexteryao 发表于 2017-3-22 16:47
理论上 您已经设置 activeSheet = $("#ss").wijspread("spread").getActiveSheet() 所以他们是完全一样的。 ...

想问一下能不能提供一个咱们spreadjs属性比较全的json结构,因为目前我们很多都是一个个添加,比较麻烦,但是没有有地方可以找到,所以想请您这边给提供一份
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-24 11:00:57
7#
您看下这个 http://sphelp.grapecity.com/webh ... tml#fullschema.html
这个是spread 的schema
回复 使用道具 举报
tianqing01
注册会员   /  发表于:2017-3-29 16:45:45
8#

在一个iframe中嵌入表单这个页面,会出现绑定事件失败,而在另一个位置的iframe中引用这个页面,绑定事件就成功了,下边是我这边做的其中一个关于单元格值变化的绑定事件的代码
$("#ss").data("spread").getActiveSheet().bind(GcSpread.Sheets.Events.CellChanged, function (e, info) {
   console.log("cellChanged...");
   if(info.propertyName == "value"){//值变化时修改单元格样式和tag
                    cellValueChanged(e, info);
   }
         });
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-29 17:38:43
9#
事件绑定和iframe没有关系,您不通过iframe直接打开页面测试下事件是否成功绑定。
回复 使用道具 举报
tianqing01
注册会员   /  发表于:2017-3-29 17:40:06
10#
tianqing01 发表于 2017-3-29 16:45
在一个iframe中嵌入表单这个页面,会出现绑定事件失败,而在另一个位置的iframe中引用这个页面,绑定事件 ...

失败的那个相当于嵌了两层iframe,也就是
<iframe id="1">
   <iframe id="2">
     ----这里是页面
   </iframe>
</iframe>而成功的那个只有一层
<iframe id="1">
     ----这里是页面
</iframe>


跟这个导致没完全加载有关系么
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部