1. 程式人生 > >Ext.data專題九:關於scope和createDelegate()

Ext.data專題九:關於scope和createDelegate()

關於JavaScript中this的使用,這是一個由來已久的問題了。

我們這裡就不介紹它的發展歷史了,只結合具體的例子,告訴大家可能會遇到什麼問題,在遇到這些問題時EXT是如何解決的。

在使用EXT時,最常碰到的就是使用Ajax回撥函式時出現的問題,如下面的程式碼所示:



現在的HTML 頁面中有一個text輸入框和一個按鈕。我們希望按下這個按鈕之後,能用Ajax去後臺讀取資料,然後把後臺響應的資料放到text中,實現過程如下:

後臺需要返回EXT所需要的JSON格式的資料,下面的內容就是後臺使用JSP的一個範例,如下面的程式碼所示。
在上面的程式碼中,Ajax已經用Ext.get('text')獲得了text,以為後面可以直接使用,沒想到回撥函式success不會按照你寫的順序去執行。 當然,也不會像你所想的那樣使用區域性變數text。 實際上,如果什麼都不做,僅僅只是使用回撥函式,你不得不再次使用Ext.get('text')重新獲得元素,否則瀏覽器就會報text未定義的錯誤。 在此使用Ext.get('text')重新獲取物件還比較簡單,在有些情況下不容易獲得需要處理的物件, 我們要在傳送Ajax請求之前獲取回撥函式中需要操作的物件,有兩種方法可供選擇:scope和createDelegate。 1. 為Ajax設定scope
在Ajax的callback引數部分新增一個scope:text,把回撥函式的scope指向text,它的作用就是把doSuccess函式裡的this指向text物件。 然後再把doSuccess裡改成this.dom. value,這樣就可以了。 如果想再次在回撥函式裡用某個物件,必須配上scope,這樣就能在回撥函式中使用this對它進行操作了。 2. 為success新增createDelegate()。 createDelegate只能在function上呼叫,它把函式裡的this強行指向我們需要的物件, 然後我們就可以在回撥函式doSuccess裡直接通過this來引用createDelegate()中指定的這個物件了。 它可以作為解決this問題的一個備選方案。 如果讓我選擇,我會盡量選擇scope,因為createDelegate是要對原來的函式進行封裝,重新生成function物件。 簡單環境下,scope就夠用了,倒是createDelegate還有其他功能,比如修改呼叫引數等。

相關推薦

Ext.data專題關於scopecreateDelegate()

關於JavaScript中this的使用,這是一個由來已久的問題了。 我們這裡就不介紹它的發展歷史了,只結合具體的例子,告訴大家可能會遇到什麼問題,在遇到這些問題時EXT是如何解決的。 在使用EXT時,最常碰到的就是使用Ajax回撥函式時出現的問題,如下面的程式碼所示: <input type

Ext.data專題Ext.data簡介

Ext.data簡介 Ext.data在名稱空間中定義了一系列store、reader和proxy。 Grid和ComboxBox都是以Ext.data為媒介獲取資料的,它包含非同步載入、型別轉換、分頁等功能。 Ext.data預設支援Array、JSON、XML等資料格式,

Swift: Delegations and Data Sources Swift委託Data Sources Lynda課程中文字幕

Swift: Delegations and Data Sources 中文字幕 Swift:代表團和資料來源 中文字幕Swift: Delegations and Data Sources 你有沒有沮喪地使用代表從一個故事板場景獲取資料到另一個故事板場景? 如果是這樣,那麼這個簡

DP動態規劃專題LeetCode 72. Edit Distance

LeetCode 72. Edit Distance Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2. You have

Oracle開發專題%TYPE %ROWTYPE

1. 使用%TYPE 在許多情況下,PL/SQL變數可以用來儲存在資料庫表中的資料。在這種情況下,變數應該擁有與表列相同的型別。例如,students表的first_name列的型別為VARCHAR2(20),我們可以按照下述方式宣告一個變數: DECLARE    

WebRTC學習之攝像頭的捕捉顯示

分享 註意 conn con wid pre rac art 升級版本 較新的WebRTC源代碼中已經沒有了與VoiceEngine結構相應的VidoeEngine了,取而代之的是MeidaEngine。MediaEngine包括了Medi

Scala筆記整理(ActorAKKA

大數據 Scala [TOC] 概述 ? Scala的Actor有點類似於Java中的多線程編程。但是不同的是,Scala的Actor提供的模型與多線程有所不同。Scala的Actor盡可能地避免鎖和共享狀態,從而避免多線程並發時出現資源爭用的情況,進而提升多線程編程的性能。 Spark中使用

python接口自動化測試二十yaml配置文件的寫

load ndt odi 模塊 自動化測試 path dirname Coding ima # 先安裝ruamel.yaml模塊寫入配置文件: import os# 先安裝ruamel.yaml模塊from ruamel import yaml# 將字典寫入到yamld

多執行緒() HashTable、HashMapConcurrentHashMap

public class HashTest { static Map<String, Integer> map = new HashMap<String, Integer>(); // static Map<String, Integer&g

第二十章非同步檔案I/O.(

跨平臺檔案I / O的第一個鏡頭在一般情況下,您將使用DependencyService為您的Xamarin.Forms應用程式提供對檔案I / O功能的訪問。從之前對DependencyService的探索中可以瞭解到,您可以在Portable Class Library專案中的介面中定義所需的函式,而實現

[Xcode10 實際操作]、實用進階-(8)實現App的Setting設定新增讀取程式的配置資訊

本文將演示如何實現新增和讀取程式的配置資訊。 在專案資料夾【DemoApp】上點選滑鼠右鍵->【New File】建立一個設定束檔案 ->【Settings Bundle】設定束: 如果想要通過裝置的【設定】程式,來展示自定義的的偏好設定,必須先準備好一個設定束 ->【Next】-&

opencv學習筆記四十基於距離變換區域性自適應閾值的物件計數

案例背景:統計下圖中玉米粒的個數 方案思路:先灰度化,再二值化(基於THRESH_TRIANGLE,圖中直方圖有明顯的雙峰值),腐蝕去掉一些小雜點,距離變換,再自適應區域性閾值,膨脹連成連通域,尋找輪廓進行計數。 距離變換於1966年被學者首次提出,目前已被廣泛應

21天學通C++學習筆記(對象

行為 邏輯 在一起 編譯 特征 str 不能 的人 學習 1. 類和對象 現實中的人等事物往往具備一些特征並且可以做某些事情,要在程序中模擬這些事物,需要一個結構,將定義其屬性(數據)以及其可用這些屬性執行的操作(函數)整合在一起。這種結構就是類,而這種結構的每一個實例就

筆記二叉樹的建立、遞迴與非遞迴版前序、中序、後序查詢、樹高節點判斷

程式碼: #include<iostream> #include<vector> #include<stack> using namespace std; template<typename T> str

Spring Data Redis 二RedisTemplate實現事物問題剖析解決

三、解決方案  只能自己實現RedisCallBack底層,採用RedisTemplate的SesionCallback來完成在同一個Connection中,完成多個操作的方法: SessionCallback<Object> sessionCallback=new SessionCa

Docker系列之Docker用於持續整合,構建JenkinsDocker伺服器

系列連結 Docker系列之一:Docker介紹及在Ubuntu上安裝 Docker系列之二:Docker 入門 Docker系列之三:使用Docker映象和倉庫 Docker系列之四:Dockerfile的使用 Docker系列之五:Volume 卷的使用——以Redis為例

第二十章非同步檔案I/O.(十

取消作業到目前為止顯示的兩個Mandelbrot程式僅用於生成單個影象,因此一旦啟動它就不可能取消該作業。但是,在一般情況下,您需要為使用者提供一種便利,以擺脫冗長的後臺作業。儘管您可以將自己的一個取消系統放在一起,但System.Threading名稱空間已經為您提供了一個名為CancellationTok

AngularJS自定義指令directive父類scope指令中scope之間的通訊

我們知道angularJs中,指令中有scope,父類controller中也有scope,兩者的通訊方式有三中,分別是 scope:false;直接使用父類的scope scope:true;繼承父類的scope scope:{@,=,&}隔離的s

C語言之指標專題指標變數指標所指向的記憶體空間是兩個不同的概念

指標變數和指標所指向的記憶體空間是兩個不同的概念 char*p = "123456";//p是一個指標變數存放在臨時棧區,"123456"是一個字串常量存放在常量區,變數p儲存的是字串的地址 char*str = (char*)malloc(100);//將分配的100位

Java B2B2C o2o多使用者商城 springcloud架構()配置中心訊息匯流排(配置中心終結版)

Spring Cloud Bus Spring cloud bus通過輕量訊息代理連線各個分佈的節點。這會用在廣播狀態的變化(例如配置變化)或者其他的訊息指令。Spring bus的一個核心思想是通過分散式的啟動器對spring boot應用進行擴充套件,也可以用來建立一個多個應用之間的通訊頻道