问题标签 [cairngorm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1057 浏览

flash - Cairngorm SequenceTask + URLLoader 由于缺少用户交互而引发 SecurityError

我正在尝试让应用程序上传多个客户端生成的图像(不是文件,因此我不能使用 FileReference),同时显示上传进度。事实证明,这比它应该做的要难得多。我正在使用 Cairngorm 任务库对客户端生成的图像执行以下步骤:

  1. 生成一个绘制舞台区域内容的 BitmapData 对象
  2. 将图像异步编码为 JPEG,以显示进度条(请参阅http://dgrigg.com/blog/2009/03/05/as3-jpegencoder-and-big-images/
  3. 异步上传图片(分块,参见http://soenkerohde.com/2010/01/chunk-file-upload/)以显示进度

当用户点击一个按钮时,SequenceTask 启动,编码就像一个魅力,但是当上传任务发生时,它会因错误而起火:

SecurityError:错误 #2176:某些操作(例如显示弹出窗口的操作)只能在用户交互时调用,例如通过鼠标单击或按钮按下。

我相信这是因为您无法在没有用户干预的情况下启动 URLLoader.load 操作。即使用户点击按钮,我认为因为事情开始异步发生,这个点击事件不再被视为发起者

有没有办法让 URLLoader 知道这是鼠标点击的结果?这对于分块上传的工作来说是必不可少的,因为所有后续块也将启动一个新的 URLLoader,所以我不能 100% 确定来自参考的分块上传器确实有效。我可能会先尝试只运行他们的纯代码。

感谢您的任何想法。

0 投票
2 回答
467 浏览

apache-flex - Cairngorm 故障处理程序

根据 Cairngorm 架构,我们总是在每个服务的每个命令类中都有一个故障处理程序。

我们如何创建一个类来处理所有服务的故障处理程序事件。

0 投票
4 回答
3757 浏览

apache-flex - 使用 PopUpManager 进行活动的最佳方式是什么?

如果我使用 PopUpManager 添加一个孩子,并且我从那个孩子分派了一个事件,那么气泡似乎不会冒泡到我的应用程序(主应用程序)的顶部。

例如:

然后在弹出窗口中,我这样做:

我在 parentApplication (根 .mxml)中有一个用于“testEvent”的 eventListener,但它永远不会触发。因此,我一直在调度事件并监听 ModelLocator 上的事件(使用 cairngorm)。这显然并不理想,因为在很多情况下我必须手动确保我删除了事件侦听器。

有任何想法吗?

谢谢!

0 投票
2 回答
442 浏览

apache-flex - 使用演示模型在 Flex 中添加元素

我正在重构由另一位开发人员编写的一些 Flex 代码,并且我正在实现 PresentationModel 方法,因为我喜欢将 ActionScript 与 MXML 分开。我发现的问题之一是原始 ActionScript 代码在 MXML 中添加/删除元素。

发生的是处理函数检查模型,如果值正确,则从视图中创建或删除元素。什么是让演示模型向视图广告元素的最佳方式,并且仍然保持我的目标是这种松散耦合。

我正在考虑使用表示模型分派的简单事件和视图可以列出来传递要添加的元素的详细信息。还有其他解决方案吗?

谢谢

斯蒂芬

0 投票
1 回答
143 浏览

apache-flex - 问题绑定


,我有一些代码。我使用凯恩戈姆。
我创建了一个简单的命令、控制器、事件、modelLocator、模型和视图。
在我看来,我有一个 textInput 与我的模型中的变量“value”绑定
<s:TextInput id="textInputName" width="100%" text="{modelLocator.model.value}" valueCommit="modelLocator.model.value = textInputName.text"/>
<mx:HRule width="100%"/>
<s:Button width="100%" label="Reset" click="reset()"/>
当我开始时,textInput 的文本是我的模型的“value”的值。
当我更改 textInput 的值时,它会更改模型的“值”。
但是当我进行重置时,它会发送一个事件并且命令将模型的“值”设置为“”,但 textInput 的文本不会改变。
为什么?textInput 的值不会因为模型的“值”值改变而改变吗?
如果不是,我该怎么做?

0 投票
1 回答
77 浏览

apache-flex - 降低基于 Cairngorm 的应用程序的层复杂性

能否以一些巧妙的方式使用 SWFAddress 之类的工具来缓解现有的客户端-服务器架构。我认为甚至可以引入类似 REST 的模式映射或类似的东西。

我目前正在做的是遵循所有 Cairngorm 指南,这已经导致了一堆有意义的命令,但是包括业务代表和所有这些东西,我很难扩展和重构应用程序(实际上,层应该有帮助,紧...也许我做得不太对,我承认)。

无论如何,我想到的是以某种方式减少飞来飞去的应用程序事件的数量,以及响应它们的命令数量。实际上,如果我能得到一些层复杂性的 rd,我什至可以将视图与一些逻辑结合起来。

我的意思是:也许,我可以将按钮单击绑定到 url 模式(或使用 SWFaddress 全局更改 url)。在另一端,我将等待 url 的更改,重新格式化它,并将其传递给服务委托,该服务委托具有必要的映射,因此它知道要调用什么方法,或者它甚至可以直接传递 url到 HTTPS 服务。然后,委托将处理服务器响应,并更新模型,模型通过绑定将更新视图。

我不会完全放弃命令。我认为它们有利于调度内部交互(在客户端本身内),但我想避免使用它们与服务器进行通信。

我在正确的道路上吗?

0 投票
2 回答
384 浏览

apache-flex - ModuleMessageInterceptor 与 MessageInterceptor

我正在使用 cairngorm 模块库和 Parsley 在 Flex 中开发应用程序。

Parsley 文档第 5 章说:“当您想决定是否应将消息传递给处理程序时,拦截器可能会派上用场”。

使用 ModuleMessageInterceptor 时,上述情况不正确。这意味着我的 MessageHandler 在 MessageInterceptor 之前接收到消息。

有谁知道解决方法?

问候,

法迪

0 投票
3 回答
444 浏览

apache-flex - Flex-Cairngorm/Hibernate - EAGER 获取策略是否毫无意义?

我会尽量简洁。我正在为我的应用程序使用Flex/Hibernate技术。我还为 Flex 使用Cairngorm微架构。因为我是初学者,所以我可能误解了 Caringorm 的 ModelLocator 目的。我有以下问题...

假设我们有下一个数据模型:

用户可以启动很多主题,主题可以有很多评论等。这是一个非常简单的模型,例如。在休眠中,我使用 EAGER 获取策略来处理单向 USER->TOPIC 和 TOPIC->COMMENT 关系(这里没有关于最佳实践等的问题,这只是问题的示例)。

我的ModelLocator看起来像这样:

因为我使用急切获取,所以我可以“遍历”我的 Flex 客户端上的所有对象图,而无需访问数据库。只要我不需要插入、更新或删除某些域实例,就可以了。但是当这种情况发生时,同步问题就出现了。

例如,如果我想从某个 UserListView显示有关某个用户的详细信息,当用户(演员)在列表中选择该用户时,我将在 UserList 中获取选定的索引,从选定索引处的 ModelLocator 中的用户 ArrayCollection 获取元素并显示有关选定的详细信息用户。

当我想插入新用户时,好的,我将该用户保存在数据库中,并在 IResponder 结果方法中将该用户添加到 ModelLocator.users ArrayCollection 中。

但是,当我想为某个用户添加新主题时,如果我仍然想使用 EAGER 获取的便利,我需要再次重新加载用户列表......并将主题添加到选定的用户......如果用户在一些其他位置(间接),我也需要在那里插入主题。更新更糟糕。在那种情况下,我什至需要写一些逻辑......

我的问题:这是在 Cairngorm 中使用 ModelLocator 的好方法吗?在我看来,由于提到,EAGER fetching 在某种程度上是毫无意义的。在使用 EAGER fetching 的情况下,Flex 客户端上的同步可能会成为大问题。我应该总是点击数据库来操作我的域模型吗?

编辑: 似乎我没有让自己足够清楚。对不起。

好的,我在技术堆栈中也使用 Spring 和带有 flex/spring (de)serializer 的 DTO(DVO) 模式,但我只是想远离它,因为我试图指出你如何与数据库状态保持同步你的弹性应用程序。我什至没有提到多用户场景和轮询/推送主题,这也许是我的解决方案,因为我使用标准的请求-响应机制。我没有提供一些具体的代码,因为这对我来说似乎是概念性的问题,我使用标准的 Cairngorm 术语来解释我用于类名、变量名等的伪名。

我将尝试再次“简化”:您有用于管理上述域的 flex 客户端(每个域类的 CRUD),您有ListOfUsersView(显示用户列表及其基本信息),UserDetailsView(显示用户详细信息和用户主题列表,每个主题都有删除选项),InsertNewUserTopicView(插入新主题的表单)等。

每个显示一些信息的视图都与 ModelLocator 状态变量同步,例如:

视图状态转换如下所示:

因此,当我单击 ListOfUsersView 中的“详细信息”按钮时,在我的逻辑中,我在 ListOfUsers 中获取所选行的索引,之后我从用户获取 UserVO 对象:ModelLocator 中提到的索引处的ArrayCollection,之后我将该 UserVO 对象设置为 selectedUser :UserVO 在 ModelLocator 中,然后我将视图状态更改为 UserDetailsView(它显示用户详细信息和 selectedUser.topics),它与 ModelLocator 中的 selectedUser:UserVO 同步。

现在,我单击UserDetailsView 上的“插入新主题” 按钮,从而生成 InsertTopicView表单。我输入一些数据,点击“保存主题”(保存成功后,再次显示UserDetailsView)出现问题

由于我 EAGER-ly 获取的对象,我没有在提到的转换中访问数据库,因此在为选定用户插入新主题时我需要关注两个地方:一个是用户中selectedUser对象的实例:ArrayCollection(因为我的逻辑从该集合中选择用户并在 UserDetailsView 中显示它们),第二个是selectedUser:UserVO(为了同步成功保存操作后的 UserDetailsView)。

所以,我的问题又出现了......我是否应该在每次转换中都点击数据库,我是否应该在保存后重新加载 users:ArrayCollection 和 selectedUser:UserVO 以便与 flex 客户端同步数据库状态,我是否应该在客户端保存主题,而不访问数据库,以编程方式传递我需要更新的所有地方或......?

在我看来,EAGER-ly 获取对象及其关联并不是一个好主意。我错了吗?

或者,再次“简化”:),在上述情况下您应该怎么做?所以,你需要处理点击“保存主题”按钮,现在是什么......?

再一次,我真的试图尽可能地解释这一点,因为我对此感到困惑。所以,请原谅我的长篇大论。

0 投票
2 回答
683 浏览

apache-flex - 如何将 flex 在线应用程序变成桌面应用程序?

我已经在使用 blazeDataservice 连接到后端的 flex (cairgorn)+spring+blazeDataservice 应用程序中工作了几年,现在它变得有点大并且需要太多时间太负载,使用它的人通常需要它定期使用它。

我的国家的互联网带宽并没有变得更好,实际上它变得更糟了,所以应用程序变得更大,带宽变得更糟,所以加载它的速度一天比一天慢。

我想知道如何将客户端安装在人们的计算机上,我将把一个 flex 在线应用程序变成一个桌面应用程序而不重写它。我只需要有人指出我正确的方向,我在考虑两个选项:

1.- 可以变成土坯空气吗?不是 adobe air 桌面吗?

2.- 也许是在人们桌面上运行的闪存?

我需要一切都可以像今天一样对抗主机 spring 后端

非常感谢你!

0 投票
2 回答
170 浏览

apache-flex - MVC 中的 M 在哪里?

我要问的问题是受我最近在 Flex 平台上的工作(以及一些假装实现 MVC 的框架)的启发,但我认为这足以让具有各种专业知识的人参与进来。

很长一段时间以来,我一直遵循由 Cairngorm 等框架提出的范式 -

视图,绑定到单例模型的属性,并调度事件。事件被前端控制器捕获,并因此执行命令。命令调用服务、获取数据并提供模型。模型通过绑定隐式更新视图。

在我得到以下数据结构之前,一切都很顺利:

用户有很多关注者(用户)关注很多用户有一堆照片关注很多位置

照片有很多喜欢的人(用户)有一个位置有一个创建者有很多相关的照片

位置有很多照片有很多追随者

同样,使用 Cairngorm 提出的想法也不是问题,例如拥有 currentUser、currentLocation 和 currentPhoto,然后绑定到它们。

问题出在视图本身。我有一系列复杂的“页面”视图,它们提供了可以想象的钻取信息。例如,位置页面显示最新/流行照片的网格、关注者面板以及基于拍摄这些照片的坐标的地图。问题来了:

显然,出于性能原因,我无法获取关注特定位置的所有用户,或者某个位置可能拥有的所有照片。我已经预取了一些,其他的将由服务器按需提供。

我想在同一视图上向下钻取,例如,当单击关注者的头像页面时,我应该得到该用户照片的一个小网格,或者某事。但我在模型中只有一个 currentUser。

这就引出了一个问题,为什么我什至需要绑定到中央单例模型?我不能把每个视图都变成一种响应者,即视图再次调度一个甚至,但是这次命令而不是提供模型,将直接提供调用视图。

不会有任何耦合,因为每个视图都会实现 IResponder。该命令将只需要一个 IResponder,它将从调用它的事件中获得。

在我看来,“模型”将扮演不同的角色。它将更像一个缓存,一个用于本地存储的全局字典,在向服务器发出请求之前将由命令检查。这样它可以节省一些对服务器的调用,但是,如果数据非常零星,这些相同的数据将与其他数据一起一次又一次地获取。(我可能在缓存中有一些用户数据,但通常我会调用服务器来收集关注者数据,无论我是否已经拥有一些数据,以保持一致性)

对这些想法的任何反馈将不胜感激