Sencha Touch能够很好地适配类似于KnockoutJS的MVVM模式吗?

7

我目前正在使用KnockoutJS构建Web应用——它真的是一种非常棒的编程方式!

现在我需要添加一个移动开发框架,一直在考虑我的选择。

我目前倾向于选择Sencha Touch,因为它已经非常成熟,并且具有我需要的独特插件。

我唯一担心的是,Sencha Touch的面向对象+声明性JavaScript编码是否与Knockout这样的MVVM框架很搭配呢?

我的意思是,Knockout利用了一个观察者模式:View(HTML页面)通过数据绑定调用模型。ExtJS(Sencha Touch)并没有丰富View……相反,它期望所有的HTML内容都以声明式的方式编写。

我是在处理不可调和的矛盾吗?你有什么想法呢?

注意:我想知道这两种不同的架构是否能够良好地配合。对于Sencha Touch与其他框架的比较,我不太感兴趣。

4个回答

5

GluJS提供了针对ExtJS 3.x和4.x的MVVM。Sencha Touch的绑定正在开发中。这些人还提供了一种简洁的规范(SVVM)方法。这些内容应该真正成为Sencha核心代码库的一部分,而且ExtJS 4.x类模型非常适合,因为4.x可以为GluJS使用的双向绑定提供钩子。

DeftJS:另一个不错的选择是DeftJS。它是一个开源库,为Sencha ExtJS和Touch添加了带有ViewControllers的MVC(所以不完全是MVVM)。它还添加了控制反转(IoC)和Promises / Deferreds,以使异步编程更加清晰。

更新...

Sencha ExtJS 5.x现在支持完整的MVVM,具有View Models,我们预计下一个主要版本... Sencha Touch 3.x...也将很可能采用相同的做法。 ExtJS 5.x还更新了包括与Sencha Touch相同的核心类和类模型,这使得Touch 3.x更有可能匹配与ExtJS 5.x相同的View Model。

KnockoutJS非常擅长它做的事情,但它只是您所需内容中的一部分。缺点是您最终需要去寻找所有缺失的部分,然后玩“如果您能找到我”的游戏,指望着明年仍由“某人”支持所有这些位。相比之下,Sencha API提供了构建和维护整个应用程序所需的大部分内容,都在一个版本周期内完成。请查看此博客文章下的“现代Web堆栈”标题。


我想开始使用这个,有什么“入门建议”吗? - blong

4
这是关于油和不同类型油的事情。Sencha Touch有自己的MVC'ish架构,具有数据绑定和模板功能,还有大量其他东西,如移动小部件、事件处理、主题、图表和可视化库等等。我预计你会在试图混合两者时遇到严重困难。但如果你成功了,我们很乐意听听你的心得(我是一位Sencha人)。
更新:正如Tony在下面提到的那样- glu.js针对Sencha已经发布了- http://www.conarrative.com/glujs.html。如果您想使用MVVM风格而不是MVC风格,则它几乎正是您要寻找的内容(我们喜欢他们的方法)。

3
肯定可以,我在上一个项目中就同时使用了这两个框架。不过你需要放弃 Knockout 最有趣的部分:DOM 元素绑定和大多数存储库的功能。相反,你需要监听视图模型的变化,并相应地更新 ExtJS 视图。并非所有的 ExtJS 组件都是可绑定视图的,比如滑块。由于我是 Flex 的用户(你可以在 Flex 中绑定任何东西,说实话,其他所有的东西都很糟糕(是的,即使是 Sencha),只要习惯了用 {} 来绑定),我感觉有些问题,所以在模型方面我使用了 Knockout。我们在谈论当 var a 更新 var b 更新 var c 时,因此 Knockout 在这方面非常完美。很多工作都必须手动完成,例如模型视图绑定,最终结果我不能说我为此感到自豪,因为它不是最有组织的代码(实际上看起来相当丑陋),除非你的模型之间有很多依赖,否则我不建议使用它。

如果我理解正确的话,你只使用了SechaTouch的视图。模型全部来自Knockout。此外,Sencha Views是由Knockout Views支持的数据绑定。你有选择使用Sencha View层的特定原因吗? - Nikhil_Katre

0

我写了一篇博客文章,概述了在Sencha Touch中使用MVVM模式的一种方法,该方法使用Sencha Touch内置的MVC技术而不依赖于其他框架。

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

总体而言,这个解决方案只有几十行代码。如果您不想学习像GluJS这样的另一个框架,那么这是一个很好的轻量级替代方案。


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