我已经掌握了 Aaron Saunders 的 ACS Sync 的窍门。由于他的 README 假设比我开始时拥有更多的先验知识,我想我会在此处放置我自己的小手册以供将来参考。
首先,您需要先了解 Backbone,然后再了解 Alloy 和 Backbone 的具体组合。Backbone 允许您执行面向对象的 Javascript:如果您的应用程序都是关于书籍的,那么您可以定义一本书的一般外观。您可以将其称为类,但 Backbone 将其称为模型。任何。
基本上,Backbone 将一个 Javascript 对象转换为一个模板(模型),您可以从中创建任意数量的特定实例。通过创建此模型的实例(也是一个 Javascript 对象),您可以为该对象提供一大堆功能,例如添加一个事件侦听器的选项,该事件侦听器会在对象的值以任何方式更改时触发。
创建主干模型及其实例
如果您不使用 Alloy,则创建 Backbone 模型的方法是:
var Book = Backbone.Model.extend({});
在此示例中,您根本没有添加任何规范。因此,创建的“Book”模板/模型获得了许多 Backbone 功能,例如添加事件侦听器的选项,但您没有自定义任何内容。
然后,使用new
关键字,您可以创建此模型的特定实例,即特定书籍。喜欢:
var myNewBook = new Book({title:"Moby Dick"}};
合金模型:app/models 中的文件
现在,Alloy 的工作方式是在 app/models 文件夹内的特定文件中定义模型,文件名就是模型的名称。因此,如果您想以 Alloy 方式创建 Book 模型,您应该创建一个文件 app/models/book.js,该文件应提供一个结构如下的导出(以 Book 的概念为例):
exports.definition = {
config: {
columns: {
"title": "String",
"pages": "Number",
},
defaults: {
"title": "Default book title",
"pages": 0,
},
adapter: {
"type": "sql"
}
}
}
请注意,这是关于您的模型的最低限度的定义。并且“适配器”位是高度可选的:稍后会清楚我为什么包含它。它的作用是指定 Backbone 应该将从该模型创建的 Javascript 对象(仅存储在内存中)同步到特定的数据存储。
您可能想要定义更多。事实上,如果你想进行 Backbone/Alloy/ACS 同步,你就必须这样做。但首先,让我们尝试在 Javascript 中创建一个 Backbone 对象。
从合金模型创建主干对象
现在,每当您想创建 Book 模型的实例时,您在代码中所做的就是使用Alloy.createModel
正确的模型名称和参数字典。像这样:
var oneBook = Alloy.createModel('Book',{title:"Moby Dick",pages:300});
Alloy 将在 app/models 文件夹中查找“book.js”文件,使用其中定义的所有属性,并返回一个带有一些 Alloy 附加功能的 Backbone 对象。
(请注意,Alloy 似乎对模型一词的含义有些困惑。您实际上并不是在创建模型,而是模型的一个实例。或者我只是不明白)
ACS 适配器
Aaron Saunders 用于自动同步 Alloy/Backbone 对象的解决方案涉及调整 Alloy 使用主干模型的方式。这就是为什么您需要从他的项目中包含至少两个文件才能使其正常工作的原因:
- /app/assets/alloy/sync/acs.js(这是安排 Alloy/Backbone 对象同步到 ACS 的“适配器”)
- app/alloy.jmk(在安装应用程序时,此文件会进行一些必要的文件系统重写)
当您安装这些文件时,Backbone 同步功能现在可以使用一个名为“acs”的新适配器。
骨干模型具有各种附加功能,包括将对象同步到数据存储(如 SQLite 数据库或 localStorage)的功能。此外,Backbone 允许程序员创建“适配器”,告诉它将数据同步到自定义数据存储。
Aaron Saunders 的解决方案将数据同步到 ACS。通过将 acs.js 文件包含在正确的文件夹中,您可以确保 Backbone/Alloy 将使用该文件来组织同步。
骇人听闻的部分
因此,如果您定义了上面定义的 Book 模型,并使用 Alloy.createModel() 在 Javascript 中创建了 Book,那么 Alloy 将查找 book.js 文件并将其用作添加自定义值的模板(如标题)您指定的。
此外,由于 acs.js 适配器,它会自动将新对象踢到 ACS。
也就是说,如果您提供一点帮助,因为有些人可能会在以后清理一些 hacky 位,但现在仍然需要它。即:在模型定义中,您需要包含一个设置字典,其中包含两个重复对象名称的参数。(是的,听起来很傻)
这是模型文件的完整示例:
exports.definition = {
config: {
columns: {
"title": "String",
"pages": "Number",
},
defaults: {
"title": "Default book title",
"pages": 0,
},
adapter: {
"type": "acs"
},
"settings": {
"object_name": "users",
"object_method": "Users"
}
}
}
总之
,我希望这有助于弄清楚 Alloy 如何在 Backbone 上构建以及 Aaron Saunders 如何在该组合之上构建。
我自己还没有回答的问题是: