0

我正在創建一個web應用程序。對應用程序很短:Restful,後端是用Java編寫的,我使用Wink。至於我想使用knockout.js的前端,我已經做了一些在線教程來適應框架。什麼是庫 - 接口後端(java)/前端(js敲除)

我已經玩了一下,爲add-delete-search功能創建了ajax調用,並通過knockout.js在一個簡單的html頁面上顯示檢索到的記錄。 我得到了建議首先創建庫/名稱空間,然後開始前端的其他任何事情。所以我決定退後一步並嘗試創建這樣的lib。

是的,我讀了互聯網上的大量文檔(關閉,命名空間,JavaScript,一般的庫,...),但不知何故,我仍然沒有進一步與lib。

問題:

  • 主要問題是:應該在LIB什麼,如果是接口後端/前端?
  • 我打算創建一個閉包(對於私人成員)。這個關閉是否是命名空間(與「命名空間」 - 主題很少有關係?)?
  • 究竟應該在這樣的圖書館裏做些什麼?
    • Ajax的通話
    • 所有Ajax的通話和所有的輔助方法淘汰賽JS
    • 模板顯示字典的
    • 視圖模型? (或者這是另一個文件..)

我的圖書館的理解: 一個lib只是一個js文件,其中包括變量和函數,屬於一個整體(封裝)。一個lib使得代碼可重用。 在庫中使用名稱空間很好,可以避免與其他庫的衝突,並且使用閉包很好,可以「創建」私有變量和公共變量和函數。 我錯了,從那裏的任何假設?

+0

您可能想看看[Swagger](https://developers.helloreverb.com/swagger/),它是爲RESTful資源發佈WSDL-like元數據的規範。你可以使用類似[amdatu](http://www.amdatu.org/components/web。html)的服務器端部分;它包含Wink並將生成Swagger元數據。如果需要,您應該可以使用該元數據爲Knockout視圖模型生成存根。然後,您可以使用JavaScript Swagger UI,將其指向元數據,併爲所有ajax調用生成函數(因此您的庫中不需要這些函數)。 –

+0

如果你走這條路,就不會有很多事情要放在圖書館裏。你大多會有特定於UI的東西,這些東西不容易重複使用,所以在試圖將其抽象到一個庫中時沒有多大意義。 –

+0

現在(這個項目)我寧願想學習如何在JavaScript中做到這一點。所以這個項目的實際任務就是學習:'用js/knockout完成一個圖書館'。當然,我也希望完成這個項目 - 但是前端有js。不過謝謝你給Swagger的提示,我想以後我會試試看。 – Meru

回答

0

我不能評論Java技術的選擇,因爲我在.NET中工作,但使用了類似於您的方法,即創建您的挖空視圖模型將使用的REST API。這個API非常重用。

Knockout專門幫助您創建UI,與其他MVVM模式一樣,使用observable屬性和數組可以節省編寫將您的代碼連接到UI的「粘合」邏輯的許多痛苦。大部分代碼將存在於您的viewModel中,其中將包含驗證,業務邏輯和應用程序狀態。您的視圖將用HTML來顯示這些數據。

因此,對於將被重用的進一步抽象幾乎沒有必要。

隨着你的進步,你會發現Knokcout是相當寬容的,你將能夠編寫一些可以在其他項目中重用的自定義綁定,但是不太可能需要進一步的抽象。

+0

我是否正確理解您的意見:您認爲,我應該使用knockout-features編寫js文件,然後這是接口?所以爲了使它更好一點,只需要關閉一下,那就是lib吧? – Meru

+0

你的js文件的大部分很可能是viewModels。這將包含使Html視圖起作用的邏輯。命名空間這是明智的,以避免在全局命名空間中發生衝突。如果你發現自己需要說一些微積分,那麼把它作爲一個單獨的庫來寫就是有意義的。如果您需要自定義綁定,例如提示應迴應輸入鍵這是一個淘汰賽的自定義綁定。您的viewModel包含您的視圖的數據和狀態,因此通常不可重複使用。 –

+0

所以,你的意思是,viewModel太特殊,不能包含在這樣的庫中?這是我的想法。我仍然試圖弄清楚,這樣的圖書館應該是什麼。我有三種類型的ajax調用:刪除,添加,搜索單詞。只有那些,也許存儲這些詞的數組應該在這樣的庫中?假設我會用模塊模式來做到這一點,然後我會將viewModel的代碼添加到它下面的同一個js文件中? – Meru