2014-09-28 39 views
0

我正在開發具有事件和任務的Titanium應用程序,並且希望將這些數據同步到雲存儲,以便用戶可以從任何應用程序或瀏覽器訪問其事件和任務,只要他們提供他們的登錄。使用Alloy和Backbone將數據同步到Titanium ACS

似乎Appcelerator/Titanium使這一切都非常容易,但它們在記錄它時很糟糕。也許我不明白。那麼,任何人都可以確認或更正我在下面畫的圖片嗎?

  1. 鈦合金應用程序允許您通過在/ models文件夾中的JSON文件中定義它們來創建模型。如果您爲該對象指定了一個屬性,如下所示:adapter: {type:'acs'} ...然後,只要您在該對象上調用.save()命令,Alloy就會將該對象存儲在ACS中。

  2. 爲了實現此目的,您必須使您的應用連接到ACS,您可以通過點擊 tiapp.xml圖形界面中的「Cloud-enable」按鈕來連接ACS。你當然必須確保應用程序使用特定的用戶名 - 密碼組合登錄ACS。

如果我樂觀地看待我的消息來源,這似乎是你需要做的所有事情。這些來源包括:

但後來我看到每個人都指由Aaron Saunders實例項目,它有它似乎建立在合金的頂部,以使一些自定義文件這個適配器:{type:'acs'}可能。要查看我在說什麼,請轉到app/assets/alloy/sync文件夾,然後在那裏查看acs.js文件。 此外,一個Q &從一年前的Tony Lukasavage回答說,目前沒有合金的內置ACS同步適配器。他指出Aaron Saunders的項目http://alloylove.com/#提供解決方案。

那麼這是怎麼回事?它確實是全部內置於Alloy/Backbone中,並且沒有記錄在任何地方,並且是Aaron Saunders使用內置的示例項目的東西,還是我需要將Aaron的代碼包含在我的項目中才能運行?

感謝您的任何提示! Wytze

自我提醒:也嘗試這個例子中,它需要創建一個新項目:https://wiki.appcelerator.org/display/td/11.+Storing+data+in+ACS

回答

0

好了,所以我想它了。您需要做的所有「簡單」示例是將適配器:{type:'acs'}添加到您的對象定義中,以便將其同步到ACS確實取決於Aaron Saunders的示例代碼。他的最好的解釋是在這裏:https://github.com/aaronksaunders/ci.alloy.adapter.two

如果你想用他的東西,基本上你只需要從他的項目中的兩個文件複製到自己的項目: 應用程序/ alloy.jmk(這樣做一些花哨的文件名重寫,我不完全理解) app/assets/alloy/sync/acs.js(這是他的東西的核心)

它似乎對我很有前途,但現在我想我會創建自己的對象以我自己的方式,然後使用常規的Ti.Cloud方法將它們同步到ACS。

3

我已經掌握了Aaron Saunders的ACS Sync。由於他的自述文件比我開始時的知識稍多一點,我想我會把自己的小手冊放在這裏供將來參考。

首先,你需要了解的第一主幹,然後合金和骨幹的特定組合。 Backbone允許您執行面向對象的Javascript:如果您的應用程序都是關於書籍的,您可以定義一本書的外觀應該如何。你可以稱它爲一個類,但骨幹稱它爲一個模型。隨你。

基本上,骨幹變成一個Javascript對象到模板(模型),從中可以創建任意數量的具體實例。通過創建這個模型(也JavaScript對象)的一個實例,您提供的對象有一大堆的功能,比如添加事件偵聽器時對象的值以任何方式改變時觸發的選項。如果你沒有使用合金

創建骨幹模型及其實例

,打造骨幹模型的方法是:

var Book = Backbone.Model.extend({}); 

在這個例子中,你不加入任何規格。因此,創建的「Book」模板/模型獲得了很多Backbone功能,如添加事件偵聽器的選項,但沒有您自己定製的功能。

然後,使用new關鍵字,您可以創建此模型的特定情況下,即特定的書籍。像:

var myNewBook = new Book({title:"Moby Dick"}}; 

合金模型:在應用程序文件/模型

現在,合金作品在該模型在app/models文件夾中的特定文件中定義這樣一種方式,並且該文件的名稱是模型的名稱。所以如果你想創建一個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對象。

的合金模型

創建骨幹對象現在,每當你要創建的圖書模型的實例,你在你的代碼做的是使用Alloy.createModel用正確的型號和參數字典。像這樣:

var oneBook = Alloy.createModel('Book',{title:"Moby Dick",pages:300}); 

合金將查找在app/models文件夾的「book.js」文件,使用其中定義的所有屬性,並附帶一些合金花俏返回骨幹對象。

(請注意,合金似乎有點模糊詞的含義混淆。您實際上並沒有創建模型,而是模型的一個實例。或者,也許我只是不明白這一點)

的ACS適配器

亞倫桑德斯的自動化合金/骨幹對象的同步解決方案包括調整該合金的使用骨幹模型的方式。這就是爲什麼你需要在爲了從他的項目至少有兩個文件所有的工作:

  • /app/assets/alloy/sync/acs.js(這是「銜接」那安排合金/骨幹對象同步到ACS)
  • 應用程序/ alloy.jmk(這個文件做了一些必要的文件系統改寫正在安裝應用程序時)

當你安裝這些文件會發生什麼現在骨幹同步功能現在可以使用一個稱爲的新適配器'ACS'。

骨幹模型具有各種附加功能,包括將對象同步到數據存儲(如SQLite數據庫或localStorage)。此外,Backbone允許程序員創建「適配器」,告訴它將數據同步到自定義數據存儲區。

亞倫桑德斯的解決方案將數據同步到ACS。通過將acs.js文件包含在適當的文件夾中,確保Backbone/Alloy將使用該文件來組織同步。

的哈克部分

所以,如果你定義如上定義的Book模型,你在Javascript中使用Alloy.createModel(),則合金將尋找book.js文件中創建一個圖書並將其用作添加自定義值(如標題)的模板。

此外,由於acs.js適配器,它會自動將新對象踢到ACS。

也就是說,如果你有一點幫助,因爲有一點可能會在稍後清理,但現在仍然需要。即:在模型定義中,您需要包含一個帶有兩個重複對象名稱的參數的設置字典。 (是的,這聽起來很傻)

所以這是模型文件的完整例子:

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" 
     } 
    } 
} 

總之 我希望這有助於明確合金將如何利用骨幹網和亞倫桑德斯如何建立在這個組合之上。

,我還沒有回答我自己的問題是:

  • 當您從您的代碼模型中的骨幹對象

    ,它同步到ACS雲。但是,如果您希望它向另一個方向發展,交通如何運作?如果數據在雲端時進行了更改,會如何處理:您將如何收到通知?你需要訂閱嗎?

  • 當應用程序處於脫機狀態時會發生什麼情況?您的待處理數據更改是否緩存直至應用程序重新聯機?如果應用程序在可以同步緩存的數據之前關閉,會發生什麼情況?

+0

我在你的軌道上有類似的問題 - 雖然很好的解釋! – Yozef 2014-12-03 23:15:51