0

選択した製品がこれをチェックするメソッドでtrueを返す場合、現在javascriptを使用して追加のフォームフィールドを表示しようとしています。フォーム選択のonchangeパーツを設定していますが、実際に製品メソッドにアクセスするのに苦労しています。経験のないjsonを使わないといけないと思います。ifステートメントでメソッドからの戻り値を使用する次のことを実行したいと思っています。私が現在使用しようとしているコードは次のとおりです(アラートATMを表示しているだけですが、私の優先事項はそれを機能させることです):

function openingCheck(optionValue){
    {% check_opening_date as json %}
    var checkOpeningDateJSON = {{json|safe}};

    if(checkOpeningDateJSON)
        alert(optionValue);

};

使用するもの:

@register.tag(name="check_opening_date")
 def check_opening_date(parser, token): 
"""return whether the product should show the opening date or not"""

product = Product.objects.get(pk=productID)

return serializers.serialize('json',product.show_opening_date())

私が抱えている問題は、optionValueをcheck_opening_date関数に渡す方法と、product.show_opening_date()の値を返す方法がわからないことです。

ヒントは大歓迎です。

4

1 に答える 1

0

2つのアプローチがあります。

  1. ページをレンダリングするときはshow_opening_date()、フォーム選択とともに結果をどこかに保存します。つまり、リストされているすべての製品について、対応する非表示の入力をどこかに作成するか、結果を属性としてselectなどに保存します。製品を選択するときは、javascriptを使用して、この非表示の入力または属性の値を確認するだけです。ロード後、サーバーとの対話は必要ありません。(サーバーへのリクエストは全体で1つです)

  2. または、単に製品を表示します。いずれかを選択すると、ajaxを使用して製品のIDを使用してサーバーに接続します。サーバーが実行product.show_opening_date()され、結果とともにjsonが返されます。(サーバーへの要求は多数あります。最初の要求、およびユーザーが製品を選択するたびに)

あなたが持っているものは意味がありません。テンプレート(およびすべてのテンプレート変数とテンプレートタグ)は、ページがレンダリングされるときにアセンブルされるため、JavaScriptが実行される(またはonchangeイベントなど)という概念がないことに注意してください。テンプレートタグの概念に少し混乱しているようです。これらは、ビューに集約された情報を表示するためのテンプレートロジックに使用する必要があります(通常、これは石に設定されていません)。

于 2012-08-08T12:01:23.927 に答える