小编bra*_*ahn的帖子

rails部分模板中的可选局部变量:如何摆脱(定义的?foo)混乱局面?

我是一个坏孩子,并在我的部分模板中使用以下语法来设置局部变量的默认值,如果在渲染部分时未在:locals哈希中显式定义值 -

<% foo = default_value unless (defined? foo) %>
Run Code Online (Sandbox Code Playgroud)

直到最近,这似乎工作正常(当时我无法辨别)未通过的变量开始表现得好像它们被定义为nil(而不是未定义).

正如SO上各种乐于助人的人所指出的,http://api.rubyonrails.org/classes/ActionView/Base.html表示使用

defined? foo
Run Code Online (Sandbox Code Playgroud)

而是使用

local_assigns.has_key? :foo
Run Code Online (Sandbox Code Playgroud)

我正在尝试修改我的方法,但这意味着要更改很多模板.

可以/我应该提前充电并在所有模板中进行此更改吗?我需要注意什么诡计?我需要多努力地测试每一个?

ruby-on-rails partials

221
推荐指数
6
解决办法
8万
查看次数

下载网页的工作本地副本

我想下载一个网页的本地副本,并获取所有的CSS,图像,JavaScript等.

在之前的讨论中(例如,这里这里,两者都超过两年),通常提出两个建议:wget -phttrack.但是,这些建议都失败了.我非常感谢使用这些工具中的任何一个来完成任务; 替代品也很可爱.


选项1: wget -p

wget -p成功下载所有网页的先决条件(css,images,js).但是,当我在Web浏览器中加载本地副本时,该页面无法加载先决条件,因为尚未从Web上的版本修改这些先决条件的路径.

例如:

  • 在页面的html中,<link rel="stylesheet href="/stylesheets/foo.css" />需要更正指向新的相对路径foo.css
  • 在css文件中,background-image: url(/images/bar.png)同样需要进行调整.

有没有办法修改,wget -p以便路径正确?


选项2:httrack

httrack对于镜像整个网站来说,它似乎是一个很棒的工具,但我不清楚如何使用它来创建单个页面的本地副本.httrack论坛中有很多关于这个主题的讨论(例如这里),但似乎没有人有防弹解决方案.


选项3:另一个工具?

有些人建议使用付费工具,但我无法相信那里没有免费的解决方案.

非常感谢!

wget download offline-browsing

199
推荐指数
1
解决办法
18万
查看次数

jquery UI sortable:如何更改"占位符"对象的外观?

http://jqueryui.com/demos/sortable/#placeholder中给出的示例中,占位符是拖动任何项目时显示的橙色框.

可以使用placeholder选项调整此元素- 但它只允许您修改元素的类,如下所述:http://jqueryui.com/demos/sortable/#options

我想更多地定制这个元素,例如通过以与向placeholder选项提供函数相同的方式向helper选项提供函数.

我需要改变什么(例如在sortable.js中)才能做到这一点?

jquery jquery-ui jquery-ui-sortable

49
推荐指数
2
解决办法
4万
查看次数

Jasmine的toThrow匹配器是否要求将参数包含在匿名函数中?

https://github.com/pivotal/jasmine/wiki/Matchers上的文档包括以下内容:

expect(function(){fn();}).toThrow(e);
Run Code Online (Sandbox Code Playgroud)

正如在讨论这个问题,下面就无法工作,因为我们想要一个函数对象传递给expect,而不是调用的结果fn()

expect(fn()).toThrow(e);
Run Code Online (Sandbox Code Playgroud)

问题1:以下工作如何?

expect(fn).toThrow(e);
Run Code Online (Sandbox Code Playgroud)

问题2:如果我thing用方法定义了一个对象,doIt下面的工作是否正常?

expect(thing.doIt).toThrow(e);
Run Code Online (Sandbox Code Playgroud)

(2a:如果是这样,有没有办法将参数传递给doIt方法?)

根据经验,答案似乎是肯定的,但我不相信我对js范围的理解足以确定.

谢谢!

javascript jasmine

37
推荐指数
4
解决办法
2万
查看次数

我何时应该在窗口与文档与document.body上观察javascript事件?

我正在将prototype.js用于我的网络应用程序,并且我已经在chrome,safari和firefox上运行了所有内容.我现在正致力于IE8的兼容性.

正如我在IE中调试一样,我注意到有一些javascript事件,我以前在窗口上设置了一个观察者,例如

Event.observe(window, eventType, function () {...});
Run Code Online (Sandbox Code Playgroud)

(eventType可能是"dom:loaded","keypress"等等),它在Chrome/Safari/Firefox中运行良好.然而,在IE中,观察者永远不会发射.

至少在某些情况下,我能得到这个被代替放置在比其他一些观察者的IE浏览器window,例如 document(在的情况下"dom:loaded")或document.body(在的情况下"keypress").但是,这都是反复试验.

是否有更系统的方法来确定这些观察者的位置,以便结果将跨浏览器兼容?

谢谢!

javascript cross-browser prototypejs dom-events

23
推荐指数
2
解决办法
7291
查看次数

如何使用Google Chrome中的工具栏打开窗口?

以下javascript在Firefox,Safari,IE和Google Chrome中打开弹出窗口:

window.open("http://google.com", "foo", "toolbar=yes,location=yes,menubar=yes")
Run Code Online (Sandbox Code Playgroud)

但是,在谷歌浏览器中,弹出窗口中不显示工具栏(带有常用的前进和后退按钮等).(在Windows和Mac上都经过测试.)

我怎样才能解决这个问题?我希望用户能够使用他们最熟悉的工具前后导航.

javascript google-chrome popup

18
推荐指数
2
解决办法
2万
查看次数

jquery UI可排序:如何让原始可见直到掉落?

http://jqueryui.com/demos/sortable/中演示的标准行为中,当您在列表中拖动项目时,将显示占位符元素,其中项目将被删除.

但是,未指示要删除的项目的原始位置.

我想让原始位置可见,直到掉落,以便视觉反馈类似于http://jqueryui.com/demos/上描述的"半透明克隆"选项保留原始位置的方式.可拖动/#视觉反馈

有什么方法可以用sortable做到这一点吗?

谢谢!

jquery jquery-ui draggable jquery-ui-sortable

11
推荐指数
1
解决办法
7601
查看次数

在Google Chrome中,如何使用父窗口中的javascript将现有弹出窗口置于最前面?

我想在网页上有一个按钮,其行为如下:

  • 在第一次单击时,打开一个弹出窗口.
  • 在稍后点击时,如果弹出窗口仍然打开,只需将其置于前面即可.如果没有,重新打开.

以下代码适用于Firefox(Mac和Windows),Safari(Mac和Windows)和IE8.(我还没有测试IE6或IE7.)但是,在谷歌浏览器(Mac和Windows)中,后来的点击无法将现有的弹出窗口置于最前面.

如何在Chrome中完成此工作?

<head>
  <script type="text/javascript">
    var popupWindow = null;
    var doPopup = function () {
      if (popupWindow && !popupWindow.closed) {
        popupWindow.focus();
      } else {
        popupWindow = window.open("http://google.com", "_blank",
          "width=200,height=200");
      }
    };
  </script>
</head>

<body>
  <button onclick="doPopup(); return false">
    create a pop-up
  </button>
</body>
Run Code Online (Sandbox Code Playgroud)

背景:我正在专门针对谷歌浏览器重新提出这个问题,因为我认为我的代码至少解决了其他现代浏览器和IE8的问题.如果有这样做的首选礼仪,请告诉我.

javascript google-chrome popup

10
推荐指数
1
解决办法
1万
查看次数

在IE8中,jquery-ui的对话框将其内容的高度设置为零.我怎样才能解决这个问题?

我正在使用jquery UI的对话框小部件在我的Web应用程序中呈现模式对话框.我这样做是通过将所需DOM元素的ID传递给以下函数:

var setupDialog = function (eltId) {
  $("#" + eltId).dialog({
    autoOpen: false,
    width: 610,
    minWidth: 610,
    height: 450,
    minHeight: 200,
    modal: true,
    resizable: false,
    draggable: false,
  });
};
Run Code Online (Sandbox Code Playgroud)

在Firefox,Safari和Chrome中,一切正常.但是,在IE 8中打开对话框时,只有div.ui-dialog-titlebar可见 - div.ui-dialog-contents不是.

问题似乎是在现代浏览器中,div.ui-dialog-contents在其样式中设置了特定的高度,即在打开对话框后,生成的HTML是:

<div class="ui-dialog-content ui-widget-content" id="invite-friends-dialog"
     style="width: auto; min-height: 198px; height: 448px">...</div>
Run Code Online (Sandbox Code Playgroud)

在IE8中,heightstyle属性设置为零,结果HTML为:

<div class="ui-dialog-content ui-widget-content" id="invite-friends-dialog"
     style="min-height: 0px; width: auto; height: 0px">...</div>
Run Code Online (Sandbox Code Playgroud)

要正确设置height(和min-height)样式属性,我需要做什么?

jquery internet-explorer jquery-ui jquery-ui-dialog

9
推荐指数
2
解决办法
1万
查看次数

我可以在只读模式下打开rails控制台吗?

我习惯于通过查询我的rails db script/console.

但在某些情况下,我需要非常小心不要更改数据,所以我希望能够以只读模式打开控制台.

有没有办法做到这一点?

谢谢!

console ruby-on-rails irb

7
推荐指数
1
解决办法
2642
查看次数