2

我是车轮新手,仍在学习。在我看来,表单的每个帖子都需要调用映射到特定模型中的方法的操作。但是,表单是否可以发布到自身?

我要避免的是人们直接导航到动作视图——这似乎会引发错误。我还想做很多自我发布,因为这可能意味着我不必在我的视图文件夹中放置很多空文件。

我正在考虑的另一个优点是,如果表单是自发布的,我将受益于在全球范围内使用它。例如,我可能在我的标题中有一个表单,我希望我的用户在网站的任何地方填写。或者有没有办法检测用户来自哪里并进行动态重定向?

非常感谢,迈克尔。

4

3 回答 3

2

Michael,您可能需要考虑制作一个像 Ajaxy 这样的表格。换句话说,您可以让它使用 jQuery 或类似方法将表单数据提交到远程 CFC 方法(即,访问属性设置为“remote”的方法)。该 CFC 可以像往常一样发挥它的魔力,并返回您在视图中采取的适当响应。

这是 Wheels 文档“ Wheels, Ajax and You ”的链接。该部分中有一些不错的东西,它可能就是您在这里寻找的东西!

于 2012-04-18T20:21:46.367 回答
2

为避免由于用户浏览post操作而导致的错误,请查看验证: http ://cfwheels.org/docs/chapter/verification

因此,您的createupdate操作将在控制器中这样配置init

<cffunction name="init">
    <cfset verifies(only="create,update", post=true, params="comment", paramsTypes="struct")>
</cffunction>

在表单发布后将用户重定向回上一页并不是不合理的。看看redirectTo(back=true)你的成功行动。 http://cfwheels.org/docs/1-1/function/redirectto

<cffunction name="init">
    <cfscript>
        verifies(only="create,update", params="comment", paramsTypes="struct");
        provides("html,json");
    </cfscript>
</cffunction>

<cffunction name="create">
    <cfscript>
        comment = model("comment").new(params.comment);
        comment.save();

        if (isAjax())
        {
            renderWith(comment);
        }
        else
        {
            if (comment.hasErrors())
                redirectTo(back=true, error="There was an error saving the comment.");
            else
                redirectTo(back=true, success="The comment was posted successfully.");
        }
    </cfscript>
</cffunction>

是的,我喜欢 Craig 的回答,即 AJAX 是一个很好的解决方案,但是您还需要考虑如果 AJAX 失败并且表单最终通过非 AJAX 请求发布到 URL 会发生什么。最好提供完全可访问的体验。

于 2012-04-18T20:56:24.117 回答
1

我对 Wheels 知之甚少的是,它是一个受 Ruby on Rails 启发的固执己见的 MVC 框架。您正在通过将表单发布到自身并绕过控制器来请求避免模型-视图-控制器模式的帮助。在这样的框架中,这不应该是可能的,或者至少是不鼓励的。

一个好的 MVC 框架应该允许您在全局范围内重用您的模型、视图,在某些情况下甚至是控制器。

于 2012-04-18T19:45:53.703 回答