0

我正在为 JavaScript 使用 jeditable 插件,我想在我的 Symfony2 项目中实现它。我想使用插件编辑一个名称,并且该名称也将在数据库中进行编辑,而不是刷新页面时要消失的更改,但就我而言,它已经消失了。:(

我几乎可以肯定控制器不应该是这样的,问题出在它身上,但究竟该怎么写呢?这里是:

public function editCategoryAction(Request $request, $id)
{   
    $category = $this->repository->find($id);      
    $form = $this->createForm(new CategoryType(), $category);

    if ($request->isMethod('POST')) {
        $form->bind($request);

        if ($form->isValid()) {
            $this->em->persist($category);
            $this->em->flush();

            return $this->redirect($this->generateUrl('categories'));
        }
    }

    return $this->render(
        'AcmeBudgetTrackerBundle:Categories:categories.html.twig', array( 
            'form' => $form->createView()));      
}

这是我的模板

    <a href="{{ path('edit_category', { 'id': cat.id}) }}">
        <strong class="edit">
            {{ cat.name }}
        </strong>
    </a> 

<script>
    var token = "{{form._token.vars.value}}";
    var path = "{{ path('edit_category', { 'id': cat.id}) }}";
</script>

这是在.js 文件中:

(function(){
     $('.edit').editable(function (value, settings) {
            var data = {};
            data[this.id] = value;
            data["_token"] = token;
            console.log(path);
            console.log(data);
            $.post(path, data);
                return(value);
            }, {
                indicator:'Saving...'
            });
}) ();

控制台中的输出看起来不错:

/BudgetTracker/web/app_dev.php/edit_category/52
Object {: "Edu", _token: "9d29860b59ccafbc265ea12346c91fa7e378cc97"} 

但问题是没有任何内容发布到数据库中,当我点击刷新时,我所做的更改就消失了。

你能帮我解决这个问题吗?提前致谢!:)

4

1 回答 1

1

我认为您不需要在这里使用表单组件,您只想处理一个字符串。所以我将解释一种方法。

JavaScript:

$('.edit').editable(path);

控制器:

public function editCategoryAction(Category $category)
{   
    //check if exists/valid

    //get the text sent from jeditable
    $name = $this->request->get('value');
    $category->setName($name);

    $em = $this->getDoctrine()->getManager();
    $em->persist($category);
    $em->flush();
    //return the name value to jeditable so it can display it
    return new Response($name);     
}

枝条:

<strong class="edit">{{ cat.name }}</strong>

<script>
    var path = "{{ path('edit_category', { 'id': cat.id}) }}";
</script>

jEditable 发送名为“值”的编辑文本,因此您可以在控制器中获取它。在您的控制器中,您隐式使用 paramconverter 从 URL 中的 id 获取类别。现在应该没问题了。

请注意,如果您想避免将 twig 与 javascript 混合以访问路径,则可以使用 FORJsRoutingBundle。

于 2013-05-31T10:53:37.563 回答