PhoneGap开发障碍:针对小型CRM的框架问题和意见

时间:2013-07-18 08:31:38

标签: jquery-mobile backbone.js angularjs frameworks cordova

我正在努力实现一个相对容易的目标:创建一个简单的跨平台CRM应用程序来管理联系人/客户及其与公司的关系。在目前的状态下,我对如何处理这个问题感到困惑(经过一些早期的动机成功)。

经过半年的Objective-C和iOS开发,我想更加认真地开始真正的应用程序项目,这将是提到的CRM应用程序。然后我听说PhoneGap,试了一下,给我留下了深刻的印象。从那以后,我很清楚我的应用程序应该是跨平台的。

为了更好地理解我想要实现的目标,这里有一些关于“要求”的细节:

  • 简单数据模型,总共5或6个实体。一对多和多对多的关系。
  • 有一个标签栏小部件,可以在公司,客户等之间快速切换。
  • 在列表视图中搜索您的类型
  • listviews的主 - 详细视图行为
  • 标题上的后退按钮,“添加/编辑”按钮也是如此。如你所料,经典的应用程序布局。

我的第一步是引导我使用UI的JQuery Mobile,乍一看,它似乎是快速构建符合要求的UI并从我的手中取出大量编码的完美候选者。我创建的模型在所有设备上运行良好,但后来我遇到了障碍:master =详细视图导航/路由。我不知道它应该如何工作,JQuery Mobile文档没有提供答案或最佳实践。我发现我可能只能在查询字符串中传递“id”并在详细信息视图中读取它。这在某种程度上起作用,但仅当页面位于外部文件(detailsview.html?id = 3)而不仅仅是内部文件(#detailsview?id = 3)时才有效。即便如此,当我从pageshow事件中的查询字符串中读取值时,我会遇到一些奇怪的行为。无论如何,所有这些修补逻辑和设计让我得到了一个线索,即必须有一个更好,更有条理的方法,比如MVC。显然有一些,即backbone.js和Angular.js(以及ember.js等),它们具有良好的深层链接。一些谷歌搜索告诉我,Angular.js可能更适合我,因为它带有双向数据绑定,并且让我编写更少的代码,这总是很受欢迎。

但是由于JQuery Mobile拥有自己的路由功能,因此JQuery Mobile和Angular.js之间存在功能重叠的问题。我可以禁用那个部分,但我可能会丢失过程中的页面转换(index.html中不再有“页面”)?我发现面漆作为UI的替代品,但它目前缺少一个非常需要/想要的标签栏小部件。正如Twitter Bootstrap似乎也缺乏它。

我还没有触及持久存储! PhoneGap API提供了存储功能,但经过几年的很好的ORM实现,如Hibernate,Entity Framework和Core Data,我想要的东西比纯SQL更“自然”。另一方面,纯SQL可能是可行的,因为项目的范围有限。所以我遇到了JayData,但还没有尝试过。由于Angular.js似乎更喜欢JSON格式的数据输入,也许Lawnchair.js可能是个好主意?我调查了它,但我无法快速找到如何以传统方式引用关系和/或对象。抛开我的学习曲线,lawnchair.js是存储关系数据的好方法吗?或者从服务器的角度来看CouchDB?我发现的大多数示例只存储了非相关数据或包含不引用其他对象的数组。我想它只需要将对象标识符存储在那些数组中,但是如何自动创建,自动增加它们并确保它们是唯一的?

我非常感谢您的想法,意见和一些指导:)!

非常感谢!

1 个答案:

答案 0 :(得分:0)

在过去的几周里,我一直在玩一堆存储和UI解决方案,我与之建立的解决方案是lawnchair.js,JQuery Mobile和其他一些像Handlebars.js这样的模板。它们使用起来非常简单,正是我所需要的。

为了存储我的JSON,我创建了这样的Lawnchairs:

var clients = new Lawnchair({
name: 'clients'
}, function (store) {
// I don't really need the callback here
});

Lawnchair的基于JSON的存储使您可以简单直观地将数据直接存储在您的javascript代码中,只需一行:

clients.save({firstName: "Jason", lastName: "Bourne", ...});

这也将完全自动创建一个唯一的密钥,供您稍后访问该对象。任何地方都没有提到的大奖金!您可以创建和定义自己的密钥,但出于我的目的,自动生成的密钥非常合适。

要与其他Lawnchairs(如“公司”)建立关系,您可以将关键字添加到查询字符串,在详细信息页面上阅读,然后将密钥添加到您想要的公司财产中,例如:

myJSONclient = clients.get(SuperLongAutoGeneratedKeyReadFromAueryString);

// Probably do some stuff with the object

// Add the key to the current company object
currentCompany.bestCustomer = myJSONclient.key;

// save it
companies.save(currentCompany);

这就是它的全部内容:)!