Sencha Touch能否适合像KnockoutJS那样的MVVM模式?

时间:2011-07-27 13:30:04

标签: mvvm sencha-touch knockout.js web-applications

我目前正在KnockoutJS之上构建一个网络应用程序 - 真的,编程幸福使用!

我已达到一个阶段,我需要添加一个移动开发框架,并一直在考虑我的选择。

我目前倾向于使用Sencha Touch,因为它的成熟度和我需要的独特插件。

我唯一担心的是Sencha Touch的OO +声明性javascript编码是否适合使用像Knockout这样的MVVM框架?

我的意思是Knockout利用View(HTML页面)将通过数据绑定调用模型的概念。 ExtJS(Sencha Touch)不会丰富View ...而是期望所有HTML内容都以声明方式编写。

我在这里处理油和水吗?你有什么想法。

注意:我很想知道这两种不同的架构是否能很好地结合在一起。不太了解Sencha Touch如何与其他框架进行比较。

4 个答案:

答案 0 :(得分:5)

GluJS 为ExtJS 3.x和4.x提供MVVM。 Sencha Touch绑定正在进行中。这些人还提供了一个简洁的规范(SVVM)方法。这个东西应该是Sencha核心代码库的一部分,ExtJS 4.x类模型非常适合,因为4.x可以为GluJS使用的双向绑定提供钩子。

DeftJS :得到良好支持的另一个不错的选择是DeftJS;一个开源库,它将MVC与ViewControllers(因此不是完全的MVVM)一起添加到Sencha ExtJS和Touch。它还增加了控制反转(IoC)和Promises / Deferred,以实现更清晰的异步编码。

更新...

Sencha ExtJS 5.x现在支持使用View Models的完整MVVM,我们希望下一个主要版本...... Sencha Touch 3.x ......也可能会这样做。 ExtJS 5.x也被更新为包含与Sencha Touch相同的核心类和类模型,因此这使得Touch 3.x更有可能匹配与ExtJS 5.x相同的视图模型。

KnockoutJS做得非常好,但它只是你需要的一部分。不好的一面是,你最终不得不去寻找所有缺失的部分,然后玩“版本我,如果你可以”交叉你的手指所有位仍然支持明年由“某人”。相比之下,Sencha API提供了在一个版本周期内构建和维护整个应用程序所需的大部分内容。查看this blog post下的标题“The Modern Web Stack”。

答案 1 :(得分:4)

这是油和......不同的油。 Sencha Touch拥有自己的MVC架构,具有数据绑定和模板,还有大量其他东西,如移动小工具,事件处理,主题,图表和图形。可视化库等。我预测你会在尝试混合这两者时遇到严重困难。但是,如果你设法做到这一点,我们很乐意听到它(我是一个sencha人)

更新:正如Tony在下面提到的那样 - 自从我回答这个问题后,Sencha的glu.js问世 - http://www.conarrative.com/glujs.html。如果你想要一个MVVM风格而不是MVC(我们喜欢他们的方法),这几乎就是你正在寻找的东西

答案 2 :(得分:3)

这绝对是可能的,我确实在我的上一个项目中使用了两者。然而,你需要放弃淘汰最有趣的部分:dom元素绑定和大多数商店的能力。相反,您需要监听视图模型更改并相应地更新ExtJS视图。并非所有的ExtJS组件都是可绑定的,我们以滑块为例。因为我是一个灵活的人(你可以绑定任何flex的东西,说实话其他一切很糟糕(甚至是sencha)在使用绑定后只需输入{})我觉得有些不对劲并使用淘汰赛为我的模型。我们正在谈论var更新var b更新var c on change,因此淘汰赛在那里是完美的。很多必须手工完成,比如模型视图绑定,最后我不能说我为结果感到骄傲,因为它不是最有组织的代码(实际上看起来很丑陋)而且我不推荐它除非你的模型之间有很多依赖关系。

答案 3 :(得分:0)

我写了一篇博客文章,概述one approach to a MVVM pattern in Sencha Touch使用Sencha Touch的内置MVC技术而不回复另一个框架。

基本上,这个想法围绕着Sencha Touch非常“基于商店”的事实:当记录被更改时,事件会在记录的商店中触发,而不是在记录本身上触发。因此,如果我们将模型视图的xtypes与商店相关联,我们可以简单地迭代这些视图,并在记录更改时根据需要更新它们。

总的来说,这个解决方案只有几十行。如果你不能学习像GluJS这样的另一个框架,那么这是一个很好的轻量级选择。