标签: unobtrusive-javascript

rails最佳实践在哪里放置不引人注目的JavaScript

我的rails应用程序(全部是2.3.5)使用内联javascript,rjs,prototype和jquery的混合.让我们称之为学习或成长的痛苦.最近我越来越迷恋不引人注目的javascript.它使你的html干净,就像css清理它一样.

但我见过的大多数例子都是小例子,他们把所有javascript(jquery)放在application.js中

现在我有一个非常大的应用程序,我正在考虑如何构建我的js.我喜欢某种方式,我的脚本仍然靠近视图,所以我在想类似的东西

orders.html.erb
orders.js
Run Code Online (Sandbox Code Playgroud)

其中orders.js包含特定于该视图的不显眼的javascript.但也许这只是我过于保守:)

我看过耶胡达·卡茨一些职位,关于这个问题非常这里这里,他铲球这个问题.它将遍历您的js文件,并仅加载与您的视图相关的文件.但唉,我找不到当前的实现.

所以我的问题:

  • 你如何最好地构建你不引人注目的JavaScript; 管理你的代码,你如何确保从HTML中明显看出应该做什么.我想好的班级名字很长:)
  • 你如何安排你的文件,加载它们?一些?你是否使用content_for :scriptjavascript_include_tag在你的视图中加载相关的脚本.要么 ... ?
  • 你编写非常通用的函数(如删除),带参数(添加额外的属性?),还是编写非常具体的函数(DRY?).我知道在Rails 3中有一个标准集,并且那里的一切都不引人注目.但是如何从Rails 2.3.5开始呢?

简而言之:在rails中执行不显眼的javascript的最佳做法是什么?:)

javascript ruby jquery ruby-on-rails unobtrusive-javascript

31
推荐指数
1
解决办法
3029
查看次数

使用来自外部JS文件的Google Analytics异步代码

我正在尝试将异步版Google Analytics跟踪代码添加到网站中.

我想将JavaScript保存在一个单独的文件中,并从那里调用它.

这是我目前在.js文件中得到的内容:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

function loadtracking() {
    var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
        _gaq.push(['_trackPageview']);

        (function() {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
}

addLoadEvent(loadtracking);
Run Code Online (Sandbox Code Playgroud)

这就是我在<head>母版页面标签中的内容:

<script …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous google-analytics unobtrusive-javascript

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

使用jQuery/JS(没有谷歌地理定位API)查找用户位置?

有没有办法只使用jQuery在网站上找到客户位置.例如,如果用户访问我的网站,我怎么能找到他们的大概位置只是使用jQuery.例如,如果用户来自旧金山CA,则会有一些类型标识符让我知道用户来自旧金山CA. 我真的不需要他们的确切位置只是县或一般的原产地.

编辑:如何生成http://flourishworks-webutils.appspot.com/req上的信息?

谢谢

javascript jquery unobtrusive-javascript

29
推荐指数
4
解决办法
8万
查看次数

如何查找当前所选对象的所有兄弟姐妹

在javascript中查找所有nextSiblings和previousSiblings的完美方式是什么?我尝试了几种方法但没有得到准确的解决方案 如果选择了任何元素,我需要得到所有下一个兄弟的长度,不包括空格,任何空格或换行符

另外我不想为此使用jquery,我特意从java脚本中查找内容

请指教

javascript unobtrusive-javascript

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

帮助,"这个"让我在JavaScript中感到困惑

使用JavaScript的一个令人困惑的事情是使用

var x = {  
  ele : 'test',
  init : function(){ 
    alert(this.ele);
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,当处理多个对象,特别是事件上下文的this变化,变得混乱,以保持跟踪/理解.

因此,如果有人有更好的意见/指导/想法/更好的做法,请分享.另外我想知道如果使用this给予任何(性能)​​优势或什么?

javascript unobtrusive-javascript javascript-events

25
推荐指数
2
解决办法
8361
查看次数

MVC Twitter Bootstrap不显眼的错误处理

我一直试图让MVC Jquery不引人注意的错误处理与twitter bootstrap一起工作一段时间了.它到了关键点我要么编辑jquery.validate,要么在document.ready上做一些破解和削减.

为了使用不引人注意的错误处理来使用Bootstrap和MVC,我需要将它附加到'control-group'类的'error'类.除此之外,'error'类被附加到输入.

我想知道社区中是否有人找到了解决方案.

例如

典型的bootstrap标记就像这样......

<div class="control-group">
    <label for="Username">Username</label>
    <div class="controls">
        <input data-val="true" data-val-required="Username is required" id="Username" name="Username" type="text" value="" />
        <span class="field-validation-valid" data-valmsg-for="Username" data-valmsg-replace="true"></span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

什么应该发生,当jquery.validate不引人注目的火灾时模糊...它会改变为以下

<div class="control-group error">
    <label for="Username">Username</label>
    <div class="controls">
        <input data-val="true" data-val-required="Username is required" id="Username" name="Username" type="text" value="" />
        <span class="field-validation-valid help-inline" data-valmsg-for="Username" data-valmsg-replace="true"></span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

要在回发/提交时使用此功能,您可以执行以下操作...

//twitter bootstrap on post
$(function () {
    $('span.field-validation-valid, span.field-validation-error').each(function () {
        $(this).addClass('help-inline');
    });

    $('form').submit(function () {
        if ($(this).valid()) {
            $(this).find('div.control-group').each(function () {
                if ($(this).find('span.field-validation-error').length == …
Run Code Online (Sandbox Code Playgroud)

css validation asp.net-mvc unobtrusive-javascript twitter-bootstrap

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

在页面上存储HTML模板的最佳实践?

我正在为我正在构建的网站开发一个相当繁重的JavaScript接口,我决定使用(最近制作的官方)jQuery模板插件从我的查询生成我的元素到JSON API.现在,我目前遇到的问题是:

我很容易有一堆这些模板.一种用于每种对象,一种用于列表,一些用于页面的部分,等等.是否有任何存储这些模板的首选方式?我已经阅读过使用模板名称定义<script>标签id,然后从那里检索文本(正如John Resig在" JavaScript Micro-Templating "中描述的那样),但是<script>每个页面中都有一堆标签看起来有点像的hackish.

所以,问题是:对于这种情况,有没有"最佳实践"?

html jquery storage templates unobtrusive-javascript

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

MVC不显眼的验证复选框不起作用

我试图在提到执行代码这篇文章.换句话说,我正试图在条款和条件复选框上实现不显眼的验证.如果用户未选中该复选框,则应将输入标记为无效.

这是服务器端Validator代码,我添加了:

/// <summary>
/// Validation attribute that demands that a boolean value must be true.
/// </summary>
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class MustBeTrueAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        return value != null && value is bool && (bool)value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是模型

[MustBeTrue(ErrorMessage = "You must accept the terms and conditions")]
[DisplayName("Accept terms and conditions")]
public bool AcceptsTerms { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我的看法:

@Html.EditorFor(x => x.AcceptTermsAndConditions)
@Html.LabelFor(x => x.AcceptTermsAndConditions)
@Html.ValidationMessageFor(x …
Run Code Online (Sandbox Code Playgroud)

unobtrusive-javascript razor unobtrusive-validation asp.net-mvc-3

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

使用Rails 3的Ajax表单 - 最佳实践?

什么被认为是Ajax表单的Rails方式

直到今天我才认为我使用Rails表单+ jQuery UJS的方式是正确的方法,但是jQuery 1.7的升级'打破'到目前为止我的方式.

这该怎么做?

我想在表单中使用Ajax.ajax响应应该再次呈现表单(例如,发生错误时)或重定向到成功页面.(它应该可以做更多,比如显示模态,但我想保持这个例子简单).

1.使用EJS和$('#formid').html(...)

这就是我迄今为止所做的.我的ajax响应是一个ejs模板,它返回了javascript代码以再次呈现表单(有错误)或者取决于是否是错误将用户重定向到成功页面:

<% unless @success_submit %>
$('#form_wrapper').html('<%= escape_javacsript( render :partial => 'form' ) %>'); 
<% else %>
document.location = '/success_thank_you';
<% endif %>
Run Code Online (Sandbox Code Playgroud)

现在假设表单包含一个错误消息div like

<div class="error_message">BlaBla</div>
Run Code Online (Sandbox Code Playgroud)

为了添加一个很好的效果,我在ajax完成时绑定了一个通用的jQuery.live事件,突出显示了错误.

$('form').live('ajax:complete', function() {
   // do stuff like highlighting all error messages in that form
}); 
Run Code Online (Sandbox Code Playgroud)

这不再适用于jQuery1.7 + jquery-ujs(可能有很好的理由).所以我猜我做的方式不对.

2.使用上述方式但重复自己

而不是绑定ajax:complete事件我可以在EJS中执行"错误突出显示内容"

$('#form_wrapper').html('<%= escape_javascript( render :partial => 'form' ) %>');
$('#form_wrapper form .error_message').fadeIn();
Run Code Online (Sandbox Code Playgroud)

但这意味着我将不得不重复几乎每一个呈现形式的EJS的第二行.当然,我想保持干爽.

3. Ajax响应呈现纯html,ajax:完成事件处理显示

一个完全不同的解决方案是ajax响应只是渲染纯html和我的自定义ajax:完整的处理程序将负责显示表单.处理程序看起来像

$('form').live('ajax:success', function(ev, data, status, xhr) {
  $(this).html(data);
  // and e.g. …
Run Code Online (Sandbox Code Playgroud)

forms ajax ruby-on-rails unobtrusive-javascript

22
推荐指数
1
解决办法
8247
查看次数

使用javascript提交rails远程表单

在我的rails应用程序中,我有一个看起来像这样的远程表单:

<%= form_tag some_path, :method => :get, :id => 'my-form', :remote => true do %>
  <%= text_field_tag :search, params[:search], :id => 'search-field' %>
  <%= submit_tag 'Go' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

现在我想通过javascript提交此表单并触发所有rails远程表单回调.到目前为止,我已经尝试了一些东西,但似乎没有任何工作.

我尝试过的事情:

$('#my-form').trigger('onsubmit')

$.rails.callFormSubmitBindings( $('#search-form') )
Run Code Online (Sandbox Code Playgroud)

但到目前为止没有运气.有任何想法吗?

jquery ruby-on-rails unobtrusive-javascript

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