2011-06-25 7 views
2

は、それが可能ではなく、関数コントローラ/ファンクション文字列のweb2py:LOADで使用する機能(アヤックス)

で= LOAD(...)を使用することです例えば:

Controller: 
def test(): 
    print "test" 

def index(): 
    return dict(test=test) 

ビュー:

むしろ、その後
{{=LOAD(test, ajax=True)}} 

ビュー:

{{=LOAD('controller', 'test', ajax=True)}} 

主な理由は、私はこの方法ではアクセスできないラムダ/生成関数を使いたいのです。

答えて

4

いいえ論理的に不可能であるため、構文がサポートされていないためではありません。LOAD()はラムダが実行されるHTTP要求とは異なるHTTP要求で実行されるため、後者は未定義です。さらに、ajaxコールバックを実行するには、呼び出される関数に名前が必要で、ラムダにすることはできません。

def callback(): 
    """ a generic callback """ 
    return cache.ram(request.args(0),lambda:None,None)(**request.vars) 

def LOAD2(f,vars={}): 
    """ a new load function """ 
    import uuid 
    u = str(uuid.uuid4()) 
    cache.ram(u,lambda f=f:f,0) 
    return LOAD(request.controller,'callback',args=u,vars=vars,ajax=True) 

def index(): 
    """ example of usage """ 
    a = LOAD2(lambda:'hello world') 
    return dict(a=a) 

をしかし、これは唯一のcache.ramで動作しますし、定期的なキャッシュのクリーンアップが必要になります。そのLOADがキャッシュにラムダを保存するように、我々は、キャッシュの創造的使用を思い付くことができます。

+0

これをクリアしていただきありがとうございます – nehz

関連する問題