通过应用程序级事件传递的 TIBlob 在接收端变为 NULL
TIBlob passed through application-level event becomes NULL on the receiving end
我有一个非常简单的应用程序,用户可以从iOS照片库中选择图像。
传递给Titanium.Media.openPhotoGallery.success
事件的 TIBlob 随后将传递给应用程序级事件。
问题是,当收到应用程序级别事件时,TIBlob 为 NULL。
下面是一个完整的代码示例。
Titanium.UI.setBackgroundColor('#000');
var win = Ti.UI.createWindow({title: 'Camera Test', exitOnClose: true, fullscreen: true, backgroundColor: '#ffffff'});
var bt = Ti.UI.createButton({'title': 'Gallery', top: 10, width: 200, height: 50});
bt.addEventListener('click', function(e) {
Titanium.Media.openPhotoGallery({
success:function(event) {
if(event.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
alert(event.media);
Ti.App.fireEvent('uploadImage', {image: event.media, source: 'gallery'});
}else {
alert('Image was not uploaded because the type was invalid.');
}
},
cancel:function() {
},
error:function(err) {
alert('Error selecting image from gallery: ' + err);
Ti.API.error(err);
},
allowEditing: false,
autohide: true,
mediaTypes:[Ti.Media.MEDIA_TYPE_PHOTO]
});
});
Ti.App.addEventListener('uploadImage', function(e) {
alert(e.image);
alert(e.source);
});
win.add(bt);
win.open();
有什么建议吗?
Appcelerator 指南说,传递的对象和事件必须是 JSON 可序列化 https://wiki.appcelerator.org/display/guides/Event+Handling#EventHandling-Firingevents。TiBlob 不可序列化,所以我认为博客没有通过事件。
如果这真的是一个非常简单的应用程序,我建议将其更改为函数调用而不是触发事件,并且 blob 将被保留。但是,如果这绝对需要一个事件,你可以传递event.media.nativePath
,然后在你实际需要对它做一些事情时从中读取一个 blob。
相关文章:
- 套接字服务器向客户端广播,但不从两者接收
- 如何在从客户端接收数据时从本机方法触发javascript函数?
- 在侦听特定端口时接收广播的数据包
- 检查HTML客户端是否接收到服务器的最佳实践's的回应
- 消息传递接收端
- 为什么获胜't客户端在公用文件夹中接收此脚本的新版本
- chrome.tabs.sendRequest:“端口错误:无法建立连接.接收端不存在
- 客户端代码未接收已发布的模型
- 如何从客户端接收节点.js中的 POST 表单数据
- 谷歌浏览器扩展:端口:无法建立连接.接收端不存在
- 主干 - 在后端接收 DELETE 数据
- Nodejs,客户端并不总是接收服务器消息
- 客户端 JavaScript 从服务器端文档集和获取函数接收过时的值
- Websocket - 客户端不接收数据
- Javascript发布数组并在服务器端接收它
- 如何从客户端到服务器端接收价值
- 通过应用程序级事件传递的 TIBlob 在接收端变为 NULL
- 端口:无法建立连接.接收端不存在
- Chrome扩展端口错误:无法建立连接.接收端不存在
- 端口错误:无法建立连接.接收端不存在