0

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

在我进行了半年的 Objective-C 和 iOS 开发之后,我想变得更加认真并开始一个真正的应用程序项目,这将是上面提到的 CRM 应用程序。然后我听说了PhoneGap,试用了一下,印象非常深刻。从那时起,我很清楚我的应用程序应该是跨平台的。

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

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

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

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

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

我将非常感谢您对此的想法、评论和一些指导:)!

非常感谢!

4

1 回答 1

0

在过去的几周里,我玩弄了一堆存储和 UI 解决方案,我选择的解决方案是 glasschair.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", ...});

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

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

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);

这里的所有都是它的 :)!

于 2013-08-12T17:29:10.830 回答