2017-02-17 41 views
0

我正在用YII2(約會網站)構建項目。我有幾個「表單模型」,我的意思是用於創建具有活動表單的表單的模型。在某些表單/模型中,我有相同的字段,例如「註冊」頁面和「配置文件」頁面中顯示的「性別」和「位置」字段。只有一些字段是相同的,其他字段是不同的,所以我不能使用相同的模型用於不同的頁面/表單。YII2:在不同的活動窗體形式及其ID中的相同元素

現在,問題是,當我使用不同的模型創建主動記錄表單時,字段的ID和CSS類也不同。

例如,我有一個名爲'SignupForm'的模型和一個名爲'EditProfileForm'的模型。鑑於(模板)我有這樣的

<?php $form = ActiveForm::begin(['id' => 'form']); ?> 
<?= $form->field($model, 'test_field') ?> 
<?php ActiveForm::end(); ?> 

代碼如果我執行了不同型號的代碼我得到不同的字段名稱(標識): 「editprofileform-test_field」 ID爲「EditProfileForm」模式 和 「SignupForm」模型的「signupform-test_field」ID。

它爲什麼會變?因爲我想爲相同的元素應用相同的CSS樣式和JavaScript處理程序。有沒有辦法讓使用不同模型生成的活動表單的ID和CSS類相同?

EDITED

一種解決方案(由@marche張貼)就是ID參數添加到文本字段

<?php $form = ActiveForm::begin(['id' => 'form']); ?> 
<?= $form->field($model, 'test_field')->textInput([ 
    'class' => 'some-css-class', 
    'id' => 'my-id', 
]) ?> 
<?php ActiveForm::end(); ?> 

它適用於文本輸入,但我也有自動完成插件

<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [ 

    'clientOptions' =>[ 
     'source' => new JsExpression("function(request, response) { 
      $.getJSON('/my-script?country='+country_id, { 
      term: request.term 
      }, response); 
     } 
    ") 
    ], 
],['id'=>'my-test-id']) ?> 

正如你所看到的,我嘗試將ID參數添加到AutoComplete中,它不起作用。請告訴我如何將ID參數分配給自動完成小部件。

回答

1

您可以將類添加到每個字段或指定其ID>

<?php $form = ActiveForm::begin(['id' => 'form']); ?> 
<?= $form->field($model, 'test_field')->textInput([ 
    'class' => 'some-css-class', 
    'id' => 'my-id', 
]) ?> 
<?php ActiveForm::end(); ?> 

如果添加了類,則可以在以後重新使用它們,或當你想使用與2相同的樣式使用它們+元素。否則,你需要定義id,所以框架不會自動生成它。

編輯

對於您需要添加像ID或類中選擇控件執行以下操作:

<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [ 
    'options' => [ 
     'id' => 'my-test-id', 
     'class' => 'my-css-class', 
    ], 
    'clientOptions' => [ 
     'source' => new JsExpression("function(request, response) { 
      $.getJSON('/my-script?country='+country_id, { 
       term: request.term 
      }, response); 
     } 
    ") 
    ], 
]) ?> 
+0

謝謝您的回答。它適用於文本字段,但我無法使它適用於自動完成小部件字段。請參閱編輯問題 – user2265529

+0

編輯我的回覆。 – marche

1

你可以做同樣的自動完成構件如:(爲類,你應該使用選項)

echo AutoComplete::widget([ 
    'name' => 'country', 
    'clientOptions' => [ 
    'source' => ['USA', 'RUS'], 
    ], 
    'id' = 'your_id_name' 
    'options' =[ 'class' => 'your_class'], 
]); 
+0

你的回答是正確的,但不能接受2個答案。所以我接受了第一個。抱歉。 – user2265529

相關問題