とりあえず学習メモ

とりあえず雑多に自分向け学習メモ。気が向いたら記事書くかも

【JavaScript】イベント駆動系メソッドまとめ

.on()メソッド

$("セレクタ”).on("イベント名",function(){
  //イベントが起きた時に行う処理
}

イベント名
click クリックされた時
dbclick ダブルクリックされた時
mouseover マウスが要素の上に乗った時
mouseout マウスが要素から離れた時
keydown キーが押された時(キーが押された瞬間、つまり直前の状態に対して実行される)
keyup キーが話された時
change 入力内容が変更された時
submit フォームが送信された時

学習メモ0218

JavaScript

同期通信
リクエストを投げ、サーバーから応答があるまでブラウザ側の表示しないような通信
非同期通信
リクエストを投げた直後からブラウザ側での操作ができるような通信
サーバーからの応答があり次第、コールバック(登録された関数)を実行する 通信中にもブラウザ操作が可能なため、ユーザビリティを高めることができる

windowオブジェクト
navigator・・・ブラウザ自身に関する情報をもつオブジェクト
location・・・現在のページに関する情報をもつオブジェクト
history・・・ブラウザの履歴をたどるback(),forwrd()をもつオブジェクト screen・・・画像に関する情報をもつオブジェクト
document・・・ページのHTML文書に関する情報をもつオブジェクト
window.location = 'URL' ・・・URLへジャンプする
window.history.back()・・・戻る

Ajaxを使った非同期通信

Ajax(Asynchronous JavaScript + XML)
JavaScriptによる非同期通信を用いたプログラミング手法のこと

JSON(JavaScript Object Notation)
サーバーからのデータのレスポンス形式のひとつ??

$ajax()
JavaScriptkらHTTPリクエストを発行するための関数 第一引数にURL,第二引数にオプションのオブジェクトをとる

const API_KEY = '取得したAPI Key';

$(function() {
  $('#weather-form').on('submit', function(e) {
    var cityName = $(this).find('#weather-form-city').prop('value');
    $.ajax()
      .done(function(data) {    //レスポンスのJSONをJavaScriputの連想配列としたものを引数としている?
        // 通信に成功した時の処理
      })
      .fail(function(data) { //XMLHTTPRequestオブジェクトを引数としている??
        // 通信に失敗した時の処理
      });
    e.preventDefault();
  });
});

API

APIとは
サーバーからの返り値をHTMLだけではなくJSONなどの形式で返す仕組みのこと
APIの作り方
1.HTMLを返すためのコントローラーを共有してAPIとして使えるようにする
2.API専用のコントローラーを作成する
3. APIを作成するためのgemを利用する
**respond_toメソッド・・・リクエストがHTMLやJSONなど何を求めているのか拡張子等から判断し、自動的に条件分岐する

respond_to do |format|
  format.html{redirect_to :root}  //HTMLリクエスト時はrootアクションにリダイレクトする
  format.json{render json:@todo}   //JSONリクエストの時はjsファイルで作成したtodo(@todo)を返す
end

非同期通信を実装する(Pictweet)

jquery-rails(gem)をインストール
application.jsに記載する
//= require jquery
//= require jquery_ujs
**コメント機能を非同期通信化する
1.jQuery記述ファイルを作成(assets/javascripts/comment.js)
2.フォームが送信されたらイベントが発火するようにする
FormData()・・・form内のデータの送信にしようできる

var fomData = new FormData(this)  //セレクタで指定したフォームの情報を取得する

デバグの方法
console.log(this)・・・引数内の内容をconsoleに出力する 3.非同期通信でコメントが保存されるようにする
attr()メソッド・・・引数ないで指定された属性値を返す

var url = $(this).attr('action')  // thisで指定されたセレクタのaction属性値を返す

processDataオプション:false要復習!わからん!
contentTypeオプション:false FormDataでフォーム情報を取得した場合はfalseにする

js.studio-kingdom.com
5.作成したメッセージをJSON形式で返す jbuilder
デフォルトでrailsに入っているgem。入力データをJSON形式で出力するテンプレートエンジン
jbuilderファイル(views/comments/create.json.jbuilder)を作成してJavaScriptで必要な情報を渡す

json.text @comment.text
json.user_id @comment.user.id
json.user_name @comment.user.nickname

6.返ってきたJSONをdoneメソッドで受け取り、HTMLを作成
テンプレートリテラル記法
HTMLをバックティック文字で囲むことで、複数行の文字列や文字列内挿入昨日が使用できる

$(function(){
  function buildHTML(comment){
    var html = `<p>
                  <strong>
                    <a href=/users/${comment.user_id}>${comment.user_name}</a>
                    :
                  </strong>
                  ${comment.text}
                </p>`
    return html;
  }
  :
  :
  :
  :

    .done(function(data){
      var html = buildHTML(data);
      $('.comments').append(html)
      $('.textbox').val('')
    })
  })
});

※アプリケーションをデプロイする際にエラーになる場合あり。
下記のコメントアウトする必要がある
config/enviroments/production.rb

// config.assets.js_compressor = :uglifier

7.エラー時の処理を行う

学習メモ0217

インスタンス変数、ゲッター、セッター、self

勉強参考記事 Railsのmodelクラスのselfが曖昧だったので - Qiita

scaffold めちゃ便利

rails g scaffold モデル名 カラム名1:データ型1 カラム名2:データ型 2 …
bundle exec db:create
bundle exec db:migrate 

ルーティング、モデル、コントローラー、ビューが自動で作成される

統合テスト

Capybara(gem)
ブラウザの操作を再現するためのgem
visitメソッド
指定したページへ移動することができるメソッド 。引数にURLかプレフィックスパスを指定。 click_onメソッド
指定したHTML要素をクリックするメソッド。引数にvalue属性の値を指定
fill_inメソッド
フォームへの入力をシュミレートする

visit("URL")
visit prefix_path
click_on(value値)
#Nameのフィールド名のtext_fieldに"Example User"を入力したシュミレート
fill_in "Name","Example User" 
fill_in 'text',with: 'フューチャースペックのテスト'

フューチャースペック
統合テストを行うためのスペック
it → scenario
before → background
describe → feature
let → given (必ずしもそうではない??)
複数のexpectを記載する
have_content/have_no_contentマッチャー・・・引数内のvalue値の要素があるかないか判断

学習メモ0216

form_forメソッド

 htmlにformタグを生成するメソッド。

 formタグの親要素内に子要素としてform_forメソッドを使っても、親要素のformが優先されてしまう。子要素のform_forに設定したアクション等は有効にならない。

 

.valid?にてエラーメッセージを生成+true,falseを返す

.errorsにてエラーメッセージを出力

エラーメッセージの生成はどこにされたかの確認方法は不明(binding.pryで止めて、どうにかするか??)

 

include?メソッドはarrayクラスのオブジェクトについては完全一致の要素がある場合のみtrue,stringクラスのオブジェクトについては部分一致でもtrue

array = ["abc","def","ghi"]

array.include("abc") => true

array.include("ab") => false

array[0].include("abc") => true

array[0].include("ab") => true

 

テストのグループ化

context 'can save' do

  it '~~~~~~~' do

  end

end

context 'can not save' do

  it '~~~~~~~' dl

  end

end

 

deviseのテスト方法 わからん

attribute_for(FactoryGirl)

オブジェクトを生成せずにハッシュを生成するメソッド

 

やること

font-awesomeの扱い

resetcss

boxsizing : border-box