我正在关注一本 O'Reilly 的书,该书正在使用 Sinatra 构建 Twitter 克隆。由于 Sinatra 没有“部分”(就像 Rails 那样),所以作者创建了自己的“片段”,就像部分一样工作。我知道这在 Sinatra 中相当普遍。
无论如何,在他的一个片段中(见下面的第一个),他调用了另一个片段 text_limiter_js (复制如下)。Text_limiter_js 基本上是一个 javascript 函数。
如果您查看 text_limiter_js 中的 javascript 函数,您会注意到它需要两个参数。我不明白这些参数是从哪里来的,因为当 text_limiter_js 在另一个片段中呈现时它们没有被传入。
我不确定我是否为某人提供了足够的信息/代码来帮助我理解这一点,但如果可以,请解释一下。
=snippet :'/snippets/text_limiter_js'
%h2.comic What are you doing?
%form{:method => 'post', :action => '/update'}
%textarea.update.span-15#update{:name => 'status', :rows => 2, :onKeyDown => "text_limiter($('#update'), $('#counter'))"}
.span-6
%span#counter
140
characters left
.prepend-12
%input#button{:type => 'submit', :value => 'update'}
text_limiter_js.haml
:javascript
function text_limiter(field,counter_field) {
limit = 139;
if (field.val().length > limit)
field.val(field.val().substring(0, limit));
else
counter_field.text(limit - field.val().length);
}