我即将启动Zend中的一些复杂的网页和表单。由于很多这将是我的新领域,我希望你能在我开始之前给我一些反馈。
我正在使用的信息通常是1-n,例如“1个组织有n个产品”。这是我正在研究的这个等式的子部分。从本质上讲,我希望用户能够从单个URL添加,查看,更新和删除子项,例如mydomain / products / index。
请注意,用户可以拥有“会员”或“管理员”权限。
我看到的关键组件是:
以下是我看到它如何运作:
这应该会加载初始页面。我认为,对于正式特权的用户,它将包括所有产品的表格,包括“删除”和“编辑”链接的列,以及表格底部的“产品添加”表单。
当用户点击链接时:
这听起来对吗?你会以不同的方式做什么?
之前我没有使用过ActionStack或AjaxContext Helpers,对jQuery的使用经验有限。这一切看起来都相当简单。
非常感谢您的想法!
答案 0 :(得分:2)
在这种情况下,您不需要动作堆栈。动作堆栈用于在一个请求期间分派多个动作。你在这里所拥有的只是一个产品/索引动作,它会加载所有可用的产品(视图可能会将其呈现到表中)。通过新的(XmlHttp或不是)请求,稍后会对所有其他操作进行分析。
我们过去所做的是使用某些简单形式的模态。用户点击“添加产品”,jQuery对产品/添加执行XHR。此操作启用了ajax(ajaxContext)并仅返回没有布局的表单。此响应将呈现为模式对话框的内容。模态有两个按钮,一个用于提交表单,另一个用于取消它。取消很简单(参见jQuery文档,只需关闭模态)。提交触发模态内部表单的提交,然后关闭模式。
通过这种设置,我们非常灵活。您还可以使用带有其他参数的<a>
元素来渲染模态:
<a href="products/add" data-title="Add a new product" data-submit="Add product">Add product</a>
我们使用数据标题呈现模态的标题,使用数据提交呈现提交按钮的值。如果您实现了ACL,XHR可以查看响应代码。对于403状态,内容只是一条消息,说明这是一个错误,不应允许用户添加产品。实际上你不应该有“添加产品”链接,但最好将403状态检查作为一种额外措施。
接下来解决的问题可能是你的1:m关系。例如,您在产品/添加页面添加产品。你有<select>
从中选择组织。在<select>
之后有一个“或添加新组织”链接。此链接的行为如上所述:modal,XHR,ajaxContext。提交表单后,您还会收听回复。您可以实现您的操作,以便在成功将组织持久保存到数据库后返回JSON字符串。 JSON被发送回浏览器并在XHR的响应中获取。您编写了一段采用此JSON数据的代码(例如,它是organisation.id和organisation.name),将其注入select(<option value="id">Name</option>
)并选择该选项。
这种方法很灵活,可以通用,并且实现起来并不困难。您需要注意的唯一部分是表单错误。 POST后,表单可能无效。这意味着响应可以是JSON返回,也可以是带有表单和错误消息的html。对于后者,您需要用响应替换模态的内容,并让用户再试一次。一个小小的捕获但却非常重要的一个。