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