国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用 rails/jquery-ujs 來編寫非侵入式的 js 模板代碼

Me_Kun / 1314人閱讀

摘要:確定要刪除嗎刪除演示不是說它有多么復(fù)雜,而是我真真切切感受到了它的高效,非常舒服的抽象了模板嵌套中的一些常用的交互。刪除代碼演示例子中中是命名空間。刪除代碼演示綁定到做回調(diào)這個事件是如何觸發(fā)的呢實(shí)際是在發(fā)送里面使用來觸發(fā)。

sf 上前端大牛太多,本人前端菜鳥,總結(jié)歸納,覺得內(nèi)容不錯就總結(jié)分享之。

慣例安利一波我的后端 php 直播課。
很多工程師在工作1~3年的時候最容易遇到瓶頸,不知道自己應(yīng)該學(xué)習(xí)什么,面試總是吃閉門羹。那么 PHP 后面應(yīng)該怎么學(xué)呢?《PHP 進(jìn)階之路》

原文地址 https://mengkang.net/1145.html
項(xiàng)目地址 https://github.com/rails/jque...
在線 demo

演示 jquery-ujs https://mengkang.net/demo/rails/

原理解析 - 代理表單提交 https://mengkang.net/demo/rai...

原理解析 - 實(shí)現(xiàn) ajax 提交 https://mengkang.net/demo/rai...

擴(kuò)展開發(fā) - 行內(nèi)回調(diào) https://mengkang.net/demo/rai...

項(xiàng)目中經(jīng)常看到類似于下面這樣的 a 鏈接的請求,而點(diǎn)擊的時候,實(shí)際發(fā)送的是 ajax 請求,而沒有發(fā)生跳轉(zhuǎn)。

刪除
演示 https://mengkang.net/demo/rails/

不是說它有多么復(fù)雜,而是我真真切切感受到了它的高效,非常舒服的抽象了模板嵌套中的一些常用的交互。避免了重復(fù)編寫類似于下面這樣的代碼:

$("#del_btn").bind("click", function () {
  if (confirm("確定要刪除?")) {
    var method = "/comments/destroy/908/";
    Ajax.sendData({
      type: "POST",
      url: method,
      async: false,
      dataType: "json",
      data: {},
      success: function (data, status, xhr) {
        if (data.state == "success") {
          location.href = "/articles/";
        } else {
          alert(data.msg);
        }
      },
      error: function (xhr, type, error) {
        console.log(error.toString());
      }
    });
  }
});

我們有可以在rails/jquery-ujs基礎(chǔ)上做更多的交互擴(kuò)展,文章末尾我們將把callback寫在行內(nèi)的方式來擴(kuò)展該工具。

原理分析 A 鏈接實(shí)現(xiàn)表單的提交

雖然點(diǎn)擊還是跳轉(zhuǎn),但是通過控制臺可以看到,該請求是 post 的方式,我們自定義的 rails 插件給代理了 click 為一個 form 的 post 請求。




    
    Title
    
    


    刪除

代碼演示 https://mengkang.net/demo/rai...

例子中

$(document).on("click.rails", "a[data-remote]", function (e) {
  //...
});

click.railsrails是命名空間。方便解除該事件。

http://api.jquery.com/on/
One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".

Any event names can be used for the events argument. jQuery will pass through the browser"s standard JavaScript event types, calling the handler function when the browser generates events due to user actions such as click. In addition, the .trigger() method can trigger both standard browser event names and custom event names to call attached handlers. Event names should only contain alphanumerics, underscore, and colon characters.

An event name can be qualified by event namespaces that simplify removing or triggering the event. For example, click.myPlugin.simple defines both the myPlugin and simple namespaces for this particular click event. A click event handler attached via that string could be removed with .off("click.myPlugin") or .off("click.simple") without disturbing other click handlers attached to the elements. Namespaces are similar to CSS classes in that they are not hierarchical; only one name needs to match. Namespaces beginning with an underscore are reserved for jQuery"s use.

實(shí)現(xiàn) A 鏈接的 ajax 請求

在上面代碼的基礎(chǔ)上我們把data-remote參數(shù)利用上,如果data-remote設(shè)置為true則表示使用 ajax 請求。




    
    Title
    
    


  刪除

代碼演示 https://mengkang.net/demo/rai...
綁定到 ajax:success 做回調(diào)
$document.on("ajax:success", ".js-comment-destroy", function() {
    return $(this).closest(".media").remove();
});

這個事件是如何觸發(fā)的呢?實(shí)際是在發(fā)送 ajax 里面使用trigger來觸發(fā)。

options = {
    success: function(data, status, xhr) {
        element.trigger("ajax:success", [data, status, xhr]);
    },
    complete: function(xhr, status) {
        element.trigger("ajax:complete", [xhr, status]);
    },
    error: function(xhr, status, error) {
        element.trigger("ajax:error", [xhr, status, error]);
    }
}

options.url = rails.href(element);
options.method = element.data("method");
options.data = element.data("params") || null;

$ajax.(options);
擴(kuò)展開發(fā)

以自定義 callback 為例,我們直接把 callback 定義在 data-done屬性中。為了完全非侵入式的 JavaScript 服務(wù)端開發(fā),才有了這個需求(反正作為一個服務(wù)端渲染的模板,不想又去專門弄前端項(xiàng)目,更愿意直接在模板里修改)

準(zhǔn)備知識之 trigger + on

我們知道在 jquery 的on方法中回調(diào)函數(shù)的參數(shù)是支持無限多參數(shù)的,第一個參數(shù)event事件本身,后面都是自定義的任意內(nèi)容

handler Type: Function( Event eventObject [, Anything extraParameter ] [, ... ] )
http://api.jquery.com/on/#on-... 中

配合trigger來使用,兩個參數(shù)演示

$( "div" ).on( "click", function( event, person ) {
  alert( "Hello, " + person.name );
});
$( "div" ).trigger( "click", { name: "Jim" } );

trigger傳遞數(shù)組

$( "div" ).on( "click", function( event, salutation, name ) {
  alert( salutation + ", " + name );
});
$( "div" ).trigger( "click", [ "Goodbye", "Jim" ] );

到這里我們就可以看到 jquery-ujs 在發(fā)送 ajax 的 options 里面設(shè)置了

options = {
    success: function(data, status, xhr) {
        element.trigger("ajax:success", [data, status, xhr]);
    },
    //...
}
//...
$ajax.(options);

那我們綁定到data-done上就是

$(document).on("ajax:success", "[data-done]", function(event, data, status, xhr) {
  //...
});
準(zhǔn)備知識之 new Function() + call
https://developer.mozilla.org...
https://developer.mozilla.org...
var obj = {
  person: "Douglas Crockford"
};

function funA() {
  console.log(this.person);
}

funA.call(obj);

function funB(arg1,arg2) {
  console.log(this.person,arg1,arg2);
}

funB.call(obj,1,2);

// new Function (arg1, arg2, ... argN, functionBody)
new Function("arg1","arg2","console.log(this.person,arg1,arg2)").call(obj,3,4);
實(shí)現(xiàn) data-done 回調(diào)
代碼演示:https://mengkang.net/demo/rai...



    
    Title
    
    





文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/92815.html

相關(guān)文章

  • Spring體系常用項(xiàng)目一覽

    摘要:的面向的異常遵從通用的異常層次結(jié)構(gòu)。比如以前常用的框架,現(xiàn)在常用的框架包含許多項(xiàng)目,下面挑一些最常用的出來總結(jié)一下。狀態(tài)是流程中事件發(fā)生的地點(diǎn),在流程中通過轉(zhuǎn)移的方式從一個狀態(tài)到另一個狀態(tài),流程的當(dāng)前狀況稱為流程數(shù)據(jù)。 如今做Java尤其是web幾乎是避免不了和Spring打交道了,但是Spring是這樣的大而全,新鮮名詞不斷產(chǎn)生,學(xué)起來給人一種凌亂的感覺,我就在這里總結(jié)一下,理順頭緒...

    OnlyLing 評論0 收藏0
  • 類型系統(tǒng)-前端進(jìn)化的里程碑

    摘要:這些優(yōu)勢,其實(shí)都是類型系統(tǒng)所帶來的強(qiáng)類型語言所具有的開發(fā)優(yōu)勢,無論是在開發(fā)體驗(yàn)還是后期項(xiàng)目維護(hù)上,都要優(yōu)于目前的。 大半夜的JavaScript Weekly發(fā)來賀電:TypeScript 2.0 Final Released! 沒錯,繼Angular2發(fā)布之后,TypeScript今天也發(fā)布了2.0版本,這不禁讓我浮想一番。如果要說TS和JS最明顯的差別,我想一定是Type Syst...

    wangzy2019 評論0 收藏0
  • Spring入門看這一篇就夠了

    摘要:甲乙交易活動不需要雙方見面,避免了雙方的互不信任造成交易失敗的問題。這就是的核心思想。統(tǒng)一配置,便于修改。帶參數(shù)的構(gòu)造函數(shù)創(chuàng)建對象首先,就要提供帶參數(shù)的構(gòu)造函數(shù)接下來,關(guān)鍵是怎么配置文件了。 前言 前面已經(jīng)學(xué)習(xí)了Struts2和Hibernate框架了。接下來學(xué)習(xí)的是Spring框架...本博文主要是引入Spring框架... Spring介紹 Spring誕生: 創(chuàng)建Spring的...

    superw 評論0 收藏0
  • Java培訓(xùn)學(xué)習(xí)之Java開源軟件的匯總

    摘要:開源軟件的匯總開源插件是一個類似于的插件,它可以幫助你在不退出的環(huán)境下瀏覽本地文件系統(tǒng)。事件模型支持基于的事件提交。開源容器是一個非侵入式的對象反轉(zhuǎn)控制容器容器。開源插件提供一個可針對文件語法進(jìn)行著色的編輯器。 Java開源軟件的匯總:EcSplorer 【Java開源 Eclipse插件】EcSplorer(Eclips...

    qiangdada 評論0 收藏0
  • 【譯】《精通使用AngularJS開發(fā)Web App》(二) --- 框架概覽,雙向數(shù)據(jù)綁定,MVC

    摘要:本書的這一部分將為隨后的章節(jié)打下基礎(chǔ),會涵蓋模板,模塊化,和依賴注入。本書的小例子中我們會使用未經(jīng)壓縮的,開發(fā)友好的版本,在的上。作用域也可以針對特定的視圖來擴(kuò)展數(shù)據(jù)和特定的功能。 上一篇:【譯】《精通使用AngularJS開發(fā)Web App》(一) 下一篇:【譯】《精通使用AngularJS開發(fā)Web App》(三) 原版書名:Mastering Web Application D...

    geekidentity 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<