使用right.js用flash [:notice]的内容刷新div?

时间:2012-02-25 02:08:41

标签: javascript ruby sinatra haml rightjs

我在我的sinatra应用程序中使用内联haml模板。我有@@layout这样的部分:

#message
  - if flash[:notice]
    %section.notice= flash[:notice]
  - if flash[:error]
    %section.error= flash[:error]

当我使用flash[:notice] =“你好!”在路线&点击一个链接,下一页愉快地在#message div中说“Hello”。很棒。

所以这就是问题所在,我正在使用right.js为我的应用程序添加一些ajax好处,机架式闪存的行为充其量是不一致的。

大多数情况下,您点击一个链接(.linkey),一点点javascript拦截它&加载到#content div(此部分也可以工作),然后重新加载'#message'div&显示上一个操作的闪烁...下次单击链接时...大约80%的时间,其余时间不显示任何内容。

这是我的js:

"a.linkey".onClick(function(event) {
   event.stop();
   $('content').load( [ "/", this.get('id'), ].join("") );
   $('message').load( '/message' );
});

我希望是这样的:

1)点击链接

2)链接目标(/ foo)被加载到#content

3)#message重新加载消息(来自路线flash[:notice] =“bar”)

4)#content现在显示/foo& #message显示“bar”

我也尝试使用$('message').load( '/message' );,但是不会将任何内容加载到#message中,或者使用“/ message”填充#message(字符串不是内容)。

我想知道这里发生了什么?是机架式闪存还是right.js?或者是其他东西?如果需要,我可以提供更多代码,但除了基本框架之外,我刚刚开始这个项目的确没有更多。

1 个答案:

答案 0 :(得分:1)

对于通过控制器操作运行的AJAX请求,您需要使用flash.now,以便闪存消息可用于当前请求。所以在你的情况下,flash.now[:notice] = "bar"