1

次のように定義されたドロップダウンリストのあるページがあります

$memb=$this->api->db->dsql()->table('vscrum_member m')
     ->field('m.id')
     ->field('m.name')
     ->where('m.team_id',$p->api->auth->get('team_id'))
     ->order('m.xlastname, m.xfirstname')
     ->do_getAssoc();

    $f=$p->add('Form');
    $l1=$f->addField('dropdown','member')->setValueList($memb);

ユーザーが変更したときにドロップダウンの現在の値を渡してページを再ロードする必要があります(GETまたはPOSTのいずれかで問題ありません)。

ATK4では、これでページのリダイレクトを引き起こすことができます

$l1->js('change')->univ()->redirect($this->api->getDestinationURL(null));

理論的には、GET変数となる2番目のパラメーターとして値の配列を追加できます。

$l1->js('change')->univ()
   ->redirect($this->api->getDestinationURL(null, array('member'=>123);

しかし、私はクライアント側で選択された値を知らないので、これは役に立ちません。javascriptでは、を使用して選択ボックスの現在の値を選択できます

 this.options[this.selectedIndex].value

そしてjqueryではあなたが使うことができます

  $('#name').val();

しかし、これまでのところ、私が持っている最も近いものは使用しています

$l1->js('change')->univ()->redirect($this->api->getDestinationURL(null, 
          array('member'=>$l1->js(true)->val())));

これはへのリダイレクトを行います

http://localhost/test1/scrumwall?
      member=%24%28%27%23test1_scrumwall_form_member%27%29.val%28%29

ドロップダウンリストの名前をパラメータ値として指定するのではなく、選択したオプションのIDを評価するための正しい構文は何でしょうか?

$ l1-> js('change')ビットは、ドロップダウンリストにonchange = ""を追加します-引用符の間に直接javascriptを挿入する方法があるかもしれませんが、例を見ることができませんでした。

私はこのようにそれを試しました

 $l1->js('change')->univ()->js(null, 
    "window.location='http://localhost/test1/scrumwall?member='+this.options[this.selectedIndex].value");

ただし、これをonchangeの引用符の間に配置せず、代わりにドロップダウンにバインドされたjquery関数(以下のブラウザービューソースの結果を参照)として追加しますが、これも機能しません。

$('#test1_scrumwall_form_member').bind('change',function(ev){    
   ev.preventDefault();ev.stopPropagation(); 
   $('#test1_scrumwall_form_member').univ().js(null,'window.location=\x27
      http://localhost/test1/scrumwall?member=\x27+this.options[this.selectedIndex].value')
 });

だから私はATK4でこれを行う方法を理解することはできません。どんな援助もありがたいです。

ありがとう

4

2 に答える 2

1

OK、それで私はそれを自分で解決しました。

/ templates/jsにmy_univ.jsという別の.jsファイルを次の内容で作成する必要がありました

$.each({
viewMember: function(url, name){              
          document.location.href=url+'?member='+$(name).val();
}
},$.univ._import);

ドロップダウンリストが必要なページに、新しい.jsをロードする行を追加しました$ this-> js()-> _ load('my_univ');

URLまたはログインしているユーザー(指定されていない場合)から値を取得します

    if ($_GET['member']){
      $member=$_GET['member'];
    } else {
      $member=$p->api->auth->get('id');
    }

データベーステーブルからドロップダウンにデータを入力するための行を追加します(現在のリスト値をログインユーザーまたはGETパラメーターのいずれかに設定することを含む)

$memb=$this->api->db->dsql()->table('vscrum_member m')
     ->field('m.id')
     ->field('m.name')
     ->where('m.team_id',$p->api->auth->get('team_id'))
     ->order('m.xlastname, m.xfirstname')
     ->do_getAssoc();

    $f=$p->add('Form');
    $l1=$f->addField('dropdown','member')->setValueList($memb)->set($member);

    $l1->js('change')->univ()->viewMember($p->api->getDestinationURL(null),$l1);

最後に、ページにデータを入力するために使用されるメインモデルに、条件を追加します

    $st = $p->add('Model_Story');
    $st->addCondition('team_id', $p->api->auth->get('team_id'));
    $st->addCondition('responsible', $member);

最後の行は、リストが変更されたときに通知します。上記の関数を呼び出してリストの名前を渡し、ユーザーがドロップダウンリストを変更すると、選択したリストの値を使用して新しいURLを作成し、そのURLを使用してページを再読み込みします。http:// localhost / test1 / scrumwall?member = N ここで、Nはリストで選択されたメンバーです-素晴らしいです。

于 2011-09-18T00:19:33.070 に答える
0

アジャイルツールキットのURL処理には、次のような形式の配列として渡すことができるメカニズムがあります。

{
    0:url,
    arg: val,
    arg2: val
}

atk4_loaderは、次のように配列として指定されたURLをサポートします。

$(element).atk4_load({0:url, member:val});

これで、PHP内で、これを使用して引数を使用してロードまたはリロードできます。http://demo.atk4.com/demo.html?t=5。あなたの場合:

$area2=$this->add('HtmlElement')->set('Data is '.(int)$_GET['member'])`
$l1->js('change', $area2->reload('member'=>$l1->js()->val()));

または、次の電話をかけることもできます。

$myview->js(true)->atk4_load(array($url,'member'=>$otherview->js()->val()));

これは、start-atk4.jsファイルで定義されている$.atk4.addArgument関数を介して実装されます。ラッパーuniv()。addArgument()もあります。リダイレクトにも使用できる可能性があります。試してみてください

$this->js()->univ()->redirect(
    array(
        $this->getDestinationURL('my page'),
        'member'=>$memberobj->js()->val()
    )
);
于 2011-09-18T00:24:25.750 に答える