TL; DR
在提供RIA的交互性的同时,我可以使用什么框架在服务器上保留100%的应用程序逻辑?
说明
回到90年代,人们可以用普通的PHP构建100%的服务器端应用程序.但随后对页内交互性的需求增加,越来越多的应用程序逻辑被转移到客户端javascript中.今天,通过websocket和完全动态的DOM,再次可以构建服务器端应用程序,同时满足所有页内交互要求.客户端所需要的只是一个通用的JavaScript库,它通过websocket同步DOM和服务器.
虽然我相信这种Web开发方法有其优点,但我不想在这里讨论这种技术的优缺点.
我的问题是关于支持这种发展方式的2014年底可用的最新框架.只要它们的架构足够清晰,实验框架也是可以的.我不需要现有框架的清单.我希望看到一些实现这种软件架构的框架,或者如果没有这样的框架,我想了解那些最接近理想的框架.
到目前为止,我自己的研究表明Meteor正在以正确的方式运行,但它仍然鼓励在客户端上使用特定于应用程序的javascript,并将服务器端平台与客户端平台(即javascript)联系起来.我已经阅读了Trello架构,它大大减少了客户端到模板处理器,但模板和相关的模板/绑定库是我想要回到服务器端的东西之一.亚马逊AppStream将保留服务器上的所有UI逻辑,但对于Web开发而言,这是非常昂贵的,尤其是当用户将应用程序闲置在后台时.
更新:到目前为止,所有答案都集中在Meteor上.我删除了Meteor标签,因为它可能会产生误导.我已经提到了Meteor,因为Meteor的演示使得我可以选择是否要运行代码服务器端或客户端.现在很清楚,Meteor不会通过网络传输任何UI,只传输数据.因此,它需要客户端上一半的应用程序,至少以模板的形式.
更新2:我发现了XML远程事件(REX),这是一种可用于从服务器端应用程序远程操作客户端DOM的协议.没有明确的方法将用户操作(点击,编辑)发送回服务器,但也许这些可以定义为REX中的扩展事件,这是规范允许的.它仍然只是一个协议.没有我可以使用的真实软件.
更新3:我必须澄清一件事.简单地将服务器端模板转换为客户端模板,然后在客户端上执行这些模板,并不算作100%服务器端应用程序逻辑.虽然这样的框架允许我使用服务器端API,但它们将不可避免地给客户端带来负担并暴露大部分应用程序代码.我正在寻找只将呈现内容(和通用事件挂钩)发送到客户端的东西.
此外,关于窗口小部件/控件,框架可以允许客户端代码处理边缘情况(新的低级别窗口小部件),但它不能要求客户端实现典型的应用程序逻辑(模板和高级窗口小部件).
我知道如何通过TransformToAncestor方法找到控件相对于其父级的位置,甚至还有一种方法可以根据该转换来确定该控件是否对用户可见。
现在我需要检测控件位置的变化。为了简单起见,我们暂时忽略效果和视觉变换。我所需要的只是监视Visual.VisualOffset中的变化。这不是依赖属性,并且没有关联的更改事件。
Visual.VisualOffset 似乎只在排列阶段更新。也许UIElement.LayoutUpdated事件可以为我提供正确的通知。但这是一个没有参数的全局事件。每当有任何变化时,我都必须迭代所有监视的视觉效果。每当用户拖动某物时,每秒必须执行最多 60 次这样的迭代。
我想知道是否有一些侵入性较小的东西不会迫使我重新检查全球所有视觉效果。
这是一个例子。查看LazyControl源代码。方法IsInView
使用 执行检查TransformToAncestor
。每次该方法所依赖的内容发生变化时,我都需要调用该方法。