2016-12-08 8 views
0

すべて、角度コントローラから動的に名前付きフォームにアクセス

私は角型コントローラの中にフォームを持っています。しかし、そのフォームの名前は(Djangoによって)サーバから動的に生成されます。誰も私がそのフォームにアクセスする方法を知っていますか?(サーバーとのやりとり後に特定のアイテムの有効性を変更する意図で)ここで

いくつかのコードです:

my_template.html:

<html> 
    <div ng-app="MyApp"> 
    <div ng-controller="MyController as my_controller"> 
     <form name={{ form.form_name }} 
     {% for field in form %} 
      {{ field }} 
     {% endfor %} 
     </form> 
     <button ng-click="do_something">do something</button> 
    </div> 
    </div> 
</html> 

my_view.py:

def my_view(request): 
    form = MyForm(form_name=generate_a_random_string()) 
    return render_to_template({"form":form} 
    return render_to_response('my_template.html', {"form": form}) 

my_app.js:

(function() { 
    var app = angular.module("MyApp"); 
    app.controller("MyController", ['$scope', function($scope) { 
     $scope.do_something = function() { 
     /* OBVIOUSLY THIS DOESN'T WORK */ 
     /* BUT WHAT DO I REPLACE "my_form" WITH ? */ 
     my_form['some_field_name'].$setValidity('some_validity_type', false); 
     my_form['some_field_name'].$setDirty(); 
     } 
    }]); 
}); 

もし私の助けがあれば、私はDjangoフォームをAngularとうまく組み合わせるためにdjango-angularを使用しています。

ありがとうございました。

+0

あなたの質問が正しいかどうかわからない場合は、 '$ scope.form.form_name'の書式を正しく取得できるはずですか? – Developer

+0

Nope。私が試みると 'TypeError:undefined'の 'form_name'プロパティを読み込めません。私は実際にフォームの名前を指定する必要があると思います。 – trubliphone

+0

フォーム名のために{{}}を削除してください。 form.form_nameとして持っていて、先ほど触れたようにしてみてください。 – Developer

答えて

0

<form name="myForm"> 

のように、フォームの名前が

myController.myForm 

が、私は問題の一部は、あなたが{{ form.form_name }}を持っているということだと思い、同じ名前のNgFormControllerとしてあなたのコントローラに反映されます私が知ることのできるテンプレートは、あなたのコントローラで初期化されていません。 おそらくコントローラ内のフォーム名を初期化してから、ng-repeatを使ってフォームDOM要素を作成し、そこから名前を引き出す必要があります。その後、ビューコントローラ内でthis.form_nameを使用してNgFormControllerにアクセスできます。

+0

二重括弧はDjangoのものです。 "my_view.py"では、form_nameプロパティを持つDjangoフォームを "my_template.html"テンプレートに渡します。 DjangoとAngularが同じ構文を変数に使うのは残念です。ちょうどそれがAngularによって計算されていない値であると仮定してください。 – trubliphone

+0

テンプレートをコントローラーにリンクすると、名前属性はどのように見えますか?私は 'name =" someName "'と仮定しますか? – jusopi

+0

はい。 '

' – trubliphone

関連する問題