LOADを書き換えるのはかなり力技と感じました。
そこで、改めてその方向を調べて、解決できました。
生成コードをみてLOADが行っているのは、
1.ajax_component() 関数に読み込むURLとtarget (DIVのid)に関連づけ、
2.リンク先のURLをtargetのDIVに読み込むこと
とみました。(LOADのパラメータでいろいろ変化しますね。)
Aヘルパーのcidの役割がやっとわかりましたので、これを使って、次のようにしました。
Aヘルパーはajax_component()をaタグにonclickで組み込むので、結局、LOADはこの目的では不要になってしまいました。
(LOADのajax属性がFalseでよくなってしまったため、実現にはLOADでなくても良いことになりました。下記ではコメント化してあります。)
manage_things.loadのリストを読み込むajaxはその目的だけのためにindex.htmlに移動しました。(これはすっきりします。)
=======
controller: test.py
def index():
return dict()
def get_list():
#ここをKATOさんのコードからヒントを得て変更、cidでターゲットを設定
db.thing.id.represent = lambda r :A(r,
_href=URL(f='manage_things', extension='load', args=r), cid='air')
rows = db(db.thing).select()
return dict(list=rows)
def manage_things():
record = None
if len(request.args)>0: record = db.thing(request.args(0,cast=int))
form = SQLFORM(db.thing, record, deletable=True)
if form.process().accepted:
response.flash = 'form accepted'
#モーダルをcloseし、一覧を更新
response.js = 'close_modal();update_list()'
elif form.errors:
response.flash = 'form has errors'
return dict(form=form)
----
view: test/index.html
// ここでargsを与えずに新規作成(このためLOADが不要になる)
{{=A('[new]', _id='new', _href=URL(f='manage_things',
extension='load'), cid='air')}}
<div id="list"></div>
<div id="cover"></div>
<div id="air">
// 不要になったLOADを一時コメント化
{{#=LOAD(f='manage_things', extension='load', target='target')}}
</div>
<script>
var open_modal = function(){
jQuery('#cover,#air').show();
}
var close_modal = function(){
jQuery("#cover,#air").hide();
}
// 仮に、一覧の更新はこういう方法で。
var update_list = function(){
ajax("{{=URL('get_list.load')}}", ['name'], "list");
}
jQuery('#new').bind('click', function() {
open_modal(); return false;
});
jQuery('#cover').bind('click',function(){
close_modal(); return false;
});
// ちょっと細工
jQuery(document).ready(function(){
// 一応chromeでは動いているが他では分からない・・・。
// jQueryのclickイベントとAのhref、onclickの関係は調べねば・・・
$("#list a").live("click",function(evt){
open_modal(); return false;
});
// 最初の表示
update_list();
});
</script>
-----
このような感じで行けるのかもしれません。結局ポイントはAヘルパーのcidでしたが、便利に使ってゆけそうです。
KATOさん、アドバイスをありがとうございました。
津田
2013年5月10日 19:43 kato <
hi21a...@yahoo.co.jp>: