1

所以我有我的 Rails 3.1 应用程序,我使用 ajax 来处理登录和注销。由于我有一些代码的重复(附加 Flash 通知,更新 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);
});

这是可用于单击事件处理程序的混淆参数的结果。解决方案是更改 click 事件以触发异步请求以注销用户:

$(".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 回答