Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 3 years have passed since last update.

Exercise -Widget編-

Last updated at Posted at 2020-03-06

このExerciseでは、名前・ID・電話番号を入力するフォームを作っていこうと思います!
#目次

  1. フォームレイアウトを作成しよう
  2. フォームコントローラに実際にソースコードを書いてみよう

#1. フォームレイアウトを作成しよう
Kony Visualizerを立ち上げ、下図にあるようにメニュータブから
[File]->[New Project]を選択してプロジェクトを新規作成します。
図1.png

下図にあるようなポップアップが出てきたら[Create Custom App]を選択します。
図2.png

下図の[Project Name]に任意のプロジェクト名を設定(例「KonyExercise1」)。
また今回は下図の[Kony Reference Architecture]を選択します。
図3.png

Visualizer画面左のメニュー内(下図)の[Responsive Web/Desktop]の下の[Forms]上で右クリックで[New Form]を選択し、新しいフォームを作成します(__Form1__が作られればOK!)。
図28.png

上図のメニューの下にある__Default Library__タブの中の、[Flex Container]を先ほど作成した__Form1__の画面上にドラッグ&ドロップすると、下図のように__Form1__の下に新たなFlex Containerが作成されればOKです。
図5.png

ただこのままだと、このFlexContainerをソース上で指定する時など様々な場面で不便になるので
Visualizer画面右側(下図)の__Properties__の__Look__で__ID__の変更を行います。
※命名規則はプロジェクトなどに則った形で!!(今回は「flxExercise」)
図6.png
また上図のような設定にすることでFlexContainerが画面いっぱいに広がっていることが確認できると思います(「flxExercise」を選択すると下図のようにFlexContainerの縁が青くなります)。
図7.png

続いて、先ほど作成した__flxExercise__の下層にウィジェットを設置していきます。
下図のようにFlexContainerの下層に更に小さなFlexContainerを設置し、
さらに下層に・・・・・という感じです。
図9.png

そうして、下図のような画面を作ってみましょう。
図13.png
各ウィジェットの階層関係は下図のようになるので参考にしてみてください。
図31.png

更に各ウィジェットの__skin__を設定することで
ユーザーが見やすく使いやすいUIの作成を目指しましょう!!
skinを設定するコツは
同じデザインのウィジェットには同じskinを使うこと
です。
3つウィジェットがあるからといって、必ずしも3つskinを作る必要はないのです。

この調子で__Form2__(下図)も作っていきましょう。
図17.png

フォーム(画面)の作成ができたら、今度はコントローラにソースコードを書いていきましょう。

#2. フォームコントローラに実際にソースコードを書いてみよう
まずここまで作成した2つの画面でどのような動きをさせたいかをまとめてみましょう。
●Form1で必要なこと
・Name、IDが入力されているかの必須チェック
・必須チェックが有効な欄にに入力がある場合「Add」ボタンを活性化させる
・入力にErrorがある場合のみError表示させる
・Form2から戻った時にテキストボックスの中を空にする
●Form2で必要なこと
・Form1で入力した値を受け取り、Nameの値をLabelに表示させる

Form1のコントローラに下記のようなソースコードを書いていきます。

Form1コントローラーその1
onPreShow : function(){
  this.view.lblErrorId.isVisible = false;
  this.view.lblErrorName.isVisible = false;
  this.view.btnAdd.setEnabled(false);
  this.view.btnAdd.skin = "sknBtnDisable";
  this.view.txtName.text = "";
  this.view.txtId.text = "";
},

こちらはForm1が表示された時に動作するfunctionです。
ただコントローラにソースコードを書くだけでは正常に動作しません。
functionを設定したいFormやウィジェットを選択し、Visualizer右側のPropertiesにある__Action__(下図)からFormやウィジェットにfunctionを設定します。
図23.png
[Edit]を押すことで下図のような画面に移りますので、今回は左メニューから__invoke function__を選択し__Function Name__から先ほどコントローラに書いたfunctionを選択します。
図24.png

同様に他のfunctionもForm1のコントーローラに書いていきましょう。

Form1コントローラーその2
checkName : function(){
  var name = this.view.txtName.text;
  if(name ==="" || name.length ===0){
    this.view.lblErrorName.isVisible = true;
    this.view.lblErrorName.text = "Error Name";
    this.view.forceLayout();
    return false;
  }else{
    this.view.lblErrorName.isVisible = false;
    return true;
  }
},

checkId : function(){
  var Id = this.view.txtId.text;
  if(Id === "" || Id.length === 0){
    this.view.lblErrorId.isVisible = true;
    this.view.lblErrorId.text = "Error Id";
    this.view.forceLayout();
    return false;
  }else{
    this.view.lblErrorId.isVisible = false;
    return true;
  }
},

checkInput : function(){
  if(this.checkName() && this.checkId()){
    this.view.btnAdd.setEnabled(true);
    this.view.btnAdd.skin = "defBtnNormal";
  }else{
    this.view.btnAdd.setEnabled(false);
    this.view.btnAdd.skin = "sknBtnDisable";
  }
},

submit : function(){
  var MoveName =this.view.txtName.text;
  new kony.mvc.Navigation("Form2").navigate(MoveName);
}

checkName、checkIdはそれぞれNameとIDの入力チェックのfunction、checkInputsはNameとIDに入力が確認された時に「Add」ボタンが活性化するfunctionです。
submitはForm2に遷移ならびにデータを送信するfunctionです。
Form1の動作に必要なソースはこれで完了です。
続いてForm2のコントローラに移りましょう。

Form2のコントローラには下図のようなソースコードを書いていきます。

Form2コントローラー
onNavigate : function(name)
  this.view.lblName.text = name;
},

backForm1 : function(){
  new kony.mvc.Navigation("Form1").navigate();
}

Form2のラベルウィジェットにForm1で渡した値(入力した名前)を受け取りたいので、そんな時はこの__onNavigate__というfunctionを使います。
これでForm2の「Labelさん」の「Label」の部分に入力した名前を入れることで、その名前を表示することができます。

また__backForm1__というfunctionを作成し、Form1に戻る動作も作ります。
こちらはForm1で作った__submit__と同じ動きです。
ただsubmitとの違いはデータの受け渡しを行なわないので、渡すデータは必要ないという点です。

これで一通りの実装は終了です。
一度ビルドしてみて動きを確かめてみましょう。
下図は実際にビルドしてみたもののスクリーンショットです。参考にしてみてください。
スクリーンショット 2020-03-12 11.01.51.png
↑「Name」と「ID」に入力がないので「Add」ボタンが非活性になっています。「Phone」は任意の入力にしています。
スクリーンショット 2020-03-12 11.02.26.png
↑入力すると「Add」ボタンが活性化し、Form2に遷移できるようになります。
スクリーンショット 2020-03-12 11.03.16.png
↑Form2に遷移するとForm1の「Name」に入れた値が表示されています。下の「Button」でForm1に戻ります。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?