JavaScript框架用于推送状态“Hijax”

6
我们所有的应用都是php mvc,并在客户端顶部使用非常简单的js行为层。我们希望更好地组织javascript,停止请求“片段”以执行简单的行为(例如,在各个地方加载不同的jquery插件)。我们不使用javascript MVC框架,并正在寻找最适合我们新应用程序的解决方案。
其中一个最有吸引力的解决方案是像Twitter一样保持服务器端呈现,他们称之为“Hijax +服务器端呈现”。我们不想在javascript中拥有完整的mvc框架,但是这篇博客中的引用对我们非常有吸引力:
“按照约定,我们的组件会附加到单个DOM节点,通过委托监听事件,在DOM上触发事件,这些事件通过DOM事件冒泡广播到其他组件。[...]其次,我们所有的组件都使用AMD定义。”
我们一直在尝试构建自己的东西,但是没有高级javascript专业知识,我们无法做得很远。像jquery-pjax这样的东西似乎也是非常简单情况的好解决方案。
我们正在寻找:
  1. UI / 数据隔离以松耦合XHR和DOM
  2. 事件驱动的UI,以便开发人员可以将监听器附加到各种DOM对象
这方面有类似于JavaScript框架的东西吗?随着pushState越来越受到关注,我希望会有一些可用的东西。有什么想法吗?

1
在我看来,Twitter的方法相当糟糕。早在六月份,我写了一个demo js bookmarklet和一篇文章,展示了他们如何通过逐步增强mobile.twitter.com来迁移到pushState。我使用了我的HTMLDecor js框架,这个演示只花了几天时间。Twitter花了多少人月才完成迁移? - Sean Hogan
有趣的评论,Sean :-) 但是,我们不会转换到js hijax,因为希望获得性能提升,有时我们需要行为脚本,HTML无法胜任,而且我们希望将服务器端应用程序最小化。这就是为什么我们认为hijax非常适合我们的原因。当禁用javascript时,您应该得到“旧”的全页面呈现应用程序的回退。我完全同意“hashbangs已死”:它们缺乏灵活性,渐进增强变得不可行。 - Jurian Sluiman
这是新的twitter.com的另一个问题 - 如果js被禁用,就没有发推文的方法。渐进增强只是事后想法。 - Sean Hogan
1
Twitter已经发布了flight - 一个轻量级的、基于组件的JavaScript框架,它将行为映射到DOM节点上。虽然它似乎没有集成pushState,但你可能可以将其与jquery-pjax结合使用。 - Sean Hogan
你能更具体地说明你需要什么吗?jquery-pjax缺少了什么是你需要的吗? - Jeffery To
@JefferyTo 就我所看到的,jquery-pjax紧密地将UI与事件和数据耦合在一起。您有一个单独的元素监听“click”,它应该是一个带有“href”的<a>元素,其中内容被注入到您具有jquery选择器的DOM节点中。如果我有一系列事件,如果我不使用<a>元素,如果我想要更新页面上的两个HTML块等等,会怎样呢?还有比<a> -> click -> block链更复杂的事情。我认为Sean指出的Flight是创建这种东西的粘合剂的好例子。我肯定会去看看! - Jurian Sluiman
2个回答

2
你可能需要查看 History.js 和 Amplifyjs(以及一些组件的话,可能需要查看 microjs)来帮助你完成相关的 IT 技术。请点击以下链接:History.jsAmplifyjs(也许还有microjs),这些工具将会对您很有帮助。

0
我将尽我所能回答你的问题。话虽如此,我必须说你的问题非常宽泛且含义模糊。你并没有成功地传达出你在寻找一个JavaScript库方面的具体需求。你提到了很多不同的主题,它们都是复杂的,并且每个主题都存在于客户端开发中的特定目的。虽然这些概念在实际应用中可能都有实现,但并没有一种清晰明确的解决方案可以解决你所有的问题。
首先,我会从你提到的“UI / 数据分离”这个点开始。这个概念实际上是关于关注点分离的。你希望你的UI与数据分开存在。你真正想要的是你的HTML反映出你的数据模型的当前状态。你还希望这个过程自动化。这是MVC设计模式下非常常见的工作流程。JavaScript为你提供了几个选项:Backbone.js, AngularJS, EmberJS等等...

根据我个人使用多种不同框架的经验,建议使用Backbonejs,因为它具有灵活和轻量级的特点。在Backbone中,我们有一个“View”的概念,可以直接与数据模型绑定。它还通过其路由机制支持所需的“pushState”概念。

“事件驱动UI”部分可以由许多不同的JavaScript库处理。jQuery可能是将事件附加到“各种dom元素”上的最流行库。 Backbone.js也允许通过其View对象轻松设置事件委托(通过事件冒泡)。

简而言之,如果您想为JavaScript添加结构... 它真的取决于您想要的“确切”内容。对于简单的事情,一点手工制作的jQuery就可以了。如果您真的想要一个更具MVC风格的应用程序,并且具有增长的潜力,则MVC框架如Backbone是正确的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接