2012-06-15 33 views
0

我是新來的骨幹,嘗試了我的第一個應用程序後,通過幾個教程的應用程序。Backbone.js自定義休息路線

我想知道什麼是完成以下

在後端(導軌)

我有一個型號名稱業務的最佳方式,這是一個有很多屬性的複雜模型,它有一個關聯的地址(has_one :address),並有一個化身和另一個配置pitcure和很多。

從我的前端我想能夠獲取和更新商業資料的特定部分,讓我們說我只想獲取basic_info,其中包括名稱,類別和地址比我想能夠更新個人資料圖片和化身。

我在骨幹所看到的是,該模型的方法保存,更新,獲取,破壞

,如果我想有其他的方法,如fetch_basic_infofetch_profile_pictureupdate_profile_picture什麼?而針對這些我希望相關的意見得到相應的通知。

以下是我想出了

可以說,我想獲取基本信息

  • 功能fetch_basci_info添加到骨幹模型

    • 在這個函數內發送使用$.ajax自定義ajax請求到服務器
    • 手動觸發事件"basicinfo:fetched"
  • 我的路由器功能內

    • 創建模型對象
    • 創建一個新的觀點可以說BasicInfoView並把它傳遞模型對象
    • 視圖裏面綁定的,甚至模型讓說model.bind('basicinfo:fetched', this.render)
    • 當路由器初始化時調用model.fetch_basic_info(在路由器初始化)

所以路由器被稱爲它創建視圖結合自定義事件,並呼籲返回服務器響應(我稱手動設置在此處設置骨幹模型的屬性)model.fetch_basic_info()請求被髮送。之後,觸發自定義事件事件,通知視圖並呈現自己

這是我的第一個真正的骨幹應用程序,所以如果我正在做一些真正阻礙我的事情。

你對此有何看法。

謝謝您的閱讀和feedbcak。

回答

0

你想要做的不是很RESTful。如果你試圖這樣做來節省資源或網絡帶寬,那麼它幾乎肯定是一個過早的優化 - 除非我們正在談論數百或數千個領域 - 在這種情況下,有一個更好的解決方案。

事實是,只抓取個人資料圖片使用與獲取50-100個字段幾乎相同的資源。是稍微多一些的數據,但考慮到網絡連接中90%的工作,延遲,資源和等待時間來自建立連接,但實際上並沒有節省那麼多。

再加上數據庫年底,

select * from businesses where id=123

只使用一點點超過

select profilepic from businesses where id=123

工作以來最困難的部分是建立與數據庫的連接並找到正確的行。之後,它的數據會更多 - 增加50個額外的列會對性能產生不明顯的影響。

這種情況只會發生在您的模型/表格包含數百或數千個屬性。在這種情況下,解決方案是將您的模型分解爲子模型。並通過REST單獨處理它們。但他們應該是業務邏輯類型。例如,業務包含地址,員工,股票結構。

我自己曾經是一個過早的優化器......「當我只需要1列時,不能返回10列」。但是,如果嘗試嘗試爲每個數據子集編寫Web服務API,而這些數據子集可能需要您的各種組合,那麼您的API實際上將無法使用且無法維護。你也永遠不會做任何工作。

說你想獲得可口可樂的資料圖片關閉Facebook的API,你只需撥打:

https://graph.facebook.com/cocacola

,並得到圖片財產。誰在乎你是否需要其餘的數據?它使事情變得簡單,寧靜,易於維護。

0

我的第一個想法是,你會複製骨幹已經提供的許多功能。我不明白爲什麼你必須在客戶端完全複製你的業務模型。爲什麼不把你的基本信息,配置文件等分解成單獨的骨幹模型,並根據需要將它們應用到你的視圖。

+0

分解是一個很酷的想法,但我不會寫我的後端來支持這些模型嗎? – Abid

+0

沒有比你的方法,我想。你打算如何處理你的單獨的獲取方法,等等。fetch_basic_info,fetch_profile_picture – lecstor

+0

也考慮到@the4thelasers的答案。如果你可以有一個單一的模型,並且你的每個視圖都可以修改他們需要的任何東西並保存它,那麼在客戶端和後端都會變得更簡單。如果您足夠幸運需要,您可以隨時進行優化。 – lecstor