1

したがって、Rails 3.1 アプリがあり、ajax を使用してログインとログアウトを処理しています。一部のコードが重複しているため (フラッシュ通知の追加、div の更新)、コードを関数に移動し、他のメソッド内からその関数を呼び出しました。関数からコードを取り出してメソッドに入れると問題なく動作しますが、コードを関数に移動した後は何もしません。

data.login は :json => ( :login => true) のようになります

$(document).ready(function() {

  function setNotice(data) {
    var $flash = $('<div class="alert alert-success"><a class="close" data-dismiss="alert" href="#">x</a>'" + data.data.message + "'</div>');
     $('#account').html( 
      if (data.login) { 
        data.email 
      } else {
        "Account"
      });
     $('.alert').alert('close');
     $('.row').prepend($flash);
  }


  $('form#sign_in').bind('ajax:success', function(e, data, status, xhr) {
    console.log(data);
    if(data.success) {
      $('#user_login_box').html(data.content);
      setNotice(data)
    } else {
      $('#status').html(data.data.message);
    }
  });

  $('.logout').bind('click', function(e, data, status, xhr) {
   setNotice(data)
  });

});
4

2 に答える 2

1

を設定するとき$.htmlは、匿名関数を使用する必要があり、return結果は次のようになります。

$('#account').html(function(){
  return data.login ? data.email : "Account" ;
});

あなたの$flash行は適切に連結されていませんでした:

var $flash = $('<div class="alert alert-success"><a class="close" data-dismiss="alert" href="#">x</a>' + data.data.message + '</div>');

または書き直し:

var $flash = $("<div>",{
  'class': 'alert alert-success',
   'html': data.data.message
});

var $link  = $("<a>",{
   'html': 'x',
  'class': 'close',
   'href': '#'
}).data("dismiss","alert").prependTo( $flash );

###チャットルームから

また、ログアウトボタンが機能していないことも確認しました。

$('.logout').bind('click', function(e, data, status, xhr) {
   setNotice(data);
});

これは、クリックイベントハンドラーで使用できるようになった混乱したパラメーターの結果でした。解決策は、クリックイベントを変更して、ユーザーをログアウトする非同期要求を発生させることでした。

$(".logout").on("click", function(e){
  e.preventDefault();
  $.post("/logout", {_method:"delete"}, function(data){
    setNotice(data);
  });
};
于 2012-05-18T03:44:36.073 に答える
1

次の行にエラーがあるようです。

var $flash = $('<div class="alert alert-success"> <a class="close" data-dismiss="alert" href="#">x</a>'" + data.data.message + "'</div>');

上記の行をこれに置き換えて、解決したかどうかをお知らせください。

var $flash = $('<div class="alert alert-success"><a class="close" data-dismiss="alert" href="#">x</a>' + data.data.message + '</div>');

すべての見積もりなどが適切に閉じられていることを確認できますか?

于 2012-05-18T03:45:45.003 に答える