CFWheels - 如何获得表格自助帖子?

时间:2012-04-18 19:17:25

标签: model-view-controller coldfusion railo cfwheels

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

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

我想到的另一个好处是,如果一个表单是自我发布的,我可以将其全局使用。例如,我的标题中可能有一个表单,我希望我的用户可以在网站的任何位置填写。或者有没有办法检测用户来自何处并进行动态重定向?

非常感谢, 迈克尔。

3 个答案:

答案 0 :(得分:2)

迈克尔,你可能想考虑制作像Ajaxy这样的形式。换句话说,您可以使用jQuery或类似方法将表单数据提交给远程CFC方法(即,其access属性设置为“remote”的方法)。 CFC可以按照惯例发挥作用,并返回您在视图中执行的相应响应。

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

答案 1 :(得分: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会发生什么。最好提供完全无障碍的体验。

答案 2 :(得分:1)

我对Wheels的了解很少,它是一个受Ruby on Rails启发的自以为是的MVC框架。您正在通过将表单发布到自身并绕过控制器来请求有关避免模型 - 视图 - 控制器模式的帮助。在这样的框架中,这是不可能的,或者至少是不鼓励的。

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