KnockoutJS 3.X API 第四章 表單綁定(10) textInput、hasFocus、checked綁定

来源:http://www.cnblogs.com/smallprogram/archive/2016/10/11/5948340.html
-Advertisement-
Play Games

textInput綁定目的 textInput綁定主要用於或者元素。他提供了DOM和viewmodel的雙向更新。不同於value綁定,textinput綁定是實時更新的。 例如: Login name: Password: ViewModel: 源碼: Login name: Password: ... ...


textInput綁定目的

textInput綁定主要用於<input>或者<textarea>元素。他提供了DOM和viewmodel的雙向更新。不同於value綁定,textinput綁定是實時更新的。

例如:

Login name:

Password:

ViewModel:

源碼:

<p>Login name: <input data-bind="textInput: userName" /></p>
<p>Password: <input type="password" data-bind="textInput: userPassword" /></p>
 
ViewModel:
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
 
<script>
    ko.applyBindings({
        userName: ko.observable(""),        // Initially blank
        userPassword: ko.observable("abc")  // Prepopulate
    });
</script>

備註1:textInput綁定 VS value綁定

雖然value結合也可以進行雙向文本框和視圖模型性能的結合,但是博主更喜歡textInput,因為他是實時更新的。value綁定與textInput綁定的主要的區別在於:

  • 即時更新

    value預設情況下,只有當用戶將焦點從文本框移開後才會更新您的模型。textInput每次擊鍵或其他文本輸入時立刻更新模型。

  • 瀏覽器的事件處理

    不同的瀏覽器有著文本輸入機制,如剪切,拖動,或接受自動完成建議的事件在不同的瀏覽器中機制是不一致。value綁定,有額外的選項,如valueUpdate: afterkeydown獲得對特定事件的更新,但是有可能不相容所有的瀏覽器。

    textInput結合是專門用來處理各種瀏覽器的不同機制,即使在應對不同的文字輸入機制也能保持一致和直接更新模型。

    不要嘗試使用valuetextInput在相同的元素上進行綁定。

     

    hasFocus綁定目的

    hasFocus綁定是視圖模型屬性與DOM元素的焦點狀態綁定。它是一個雙向綁定,所以:

  • 如果您的視圖模型屬性設置為true或者false,相關的元素將成為聚焦的或未聚焦。
  • 如果用戶手動對焦或unfocuses相關元件,所述視圖模型屬性將被設置為truefalse相應。

    如果您正在構建中,編輯元素動態顯示覆雜的形式,你想控制,用戶應該開始打字,或插入符的響應位置,這是非常有用的。

    示例1

    這個例子中當文本框當前具有焦點時則顯示消息,並可以使用一個按鈕通過編程方式觸發焦點。

    The textbox has focus

    源碼:

    <input data-bind="hasFocus: isSelected">
    <button data-bind="click: setIsSelected">Focus programmatically</button>
     <span data-bind="visible: isSelected">The textbox has focus</span> 
    <script>
    var viewModel = {
        isSelected: ko.observable(false),
        setIsSelected: function() { this.isSelected(true) }
    };
    ko.applyBindings(viewModel,document.getElementById("eq2"));
    </script>

    示例2

    因為hasFocus綁定是雙向綁定,這可以使切換的“編輯”模式更加便捷。

    Name:  

    Click the name to edit it; click elsewhere to apply changes.

    源碼:

    <p>
        Name: 
        <b data-bind="visible: !editing(), text: name, click: edit">&nbsp;</b>
        <input data-bind="visible: editing, value: name, hasFocus: editing" />
    </p>
    <p><em>Click the name to edit it; click elsewhere to apply changes.</em></p>
    <script>
    function PersonViewModel(name) {
        // Data
        this.name = ko.observable(name);
        this.editing = ko.observable(false);
             
        // Behaviors
        this.edit = function() { this.editing(true) }
    }
     
    ko.applyBindings(new PersonViewModel("Bert Bertington"),document.getElementById("eq3"));
    
    </script>

    checked綁定目的

    checked綁定主要用於覆選框(<input type='checkbox'>)或單選按鈕(<input type='radio'>) 並與視圖模型屬性進行綁定。

    當用戶更改了表單控制項,這將更新您的視圖模型屬性的值。同樣,當您更新您的視圖模型的值,也將直接反映到表單控制項上。

    註意:對於文本框,下拉列表,以及所有以非可勾選表單控制項,需要使用value綁定或者textInput綁定讀寫元素的值,而不是checked綁定。

    示例1:覆選框綁定

    Send me spam:

    源碼:

    <p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p>
     
    <script type="text/javascript">
        var viewModel = {
            wantsSpam: ko.observable(true) // Initially checked
        };
     
        // ... then later ...
        viewModel.wantsSpam(false); // The checkbox becomes unchecked
    </script>

    示例2:多覆選框附帶數組綁定

    Send me spam:

    Preferred flavors of spam: Cherry Almond Monosodium Glutamate

    源碼:

    <p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p>
    <div data-bind="visible: wantsSpam">
        Preferred flavors of spam:
        <div><input type="checkbox" value="cherry" data-bind="checked: spamFlavors" /> Cherry</div>
        <div><input type="checkbox" value="almond" data-bind="checked: spamFlavors" /> Almond</div>
        <div><input type="checkbox" value="msg" data-bind="checked: spamFlavors" /> Monosodium Glutamate</div>
    </div>
     
    <script type="text/javascript">
        var viewModel = {
            wantsSpam: ko.observable(true),
            spamFlavors: ko.observableArray(["cherry","almond"]) // Initially checks the Cherry and Almond checkboxes
        };
     
        // ... then later ...
        viewModel.spamFlavors.push("msg"); // Now additionally checks the Monosodium Glutamate checkbox
    </script>

    示例3:單選按鈕

    Send me spam:

    Preferred flavor of spam: Cherry Almond Monosodium Glutamate

    源碼:

    <p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p>
    <div data-bind="visible: wantsSpam">
        Preferred flavor of spam:
        <div><input type="radio" name="flavorGroup" value="cherry" data-bind="checked: spamFlavor" /> Cherry</div>
        <div><input type="radio" name="flavorGroup" value="almond" data-bind="checked: spamFlavor" /> Almond</div>
        <div><input type="radio" name="flavorGroup" value="msg" data-bind="checked: spamFlavor" /> Monosodium Glutamate</div>
    </div>
     
    <script type="text/javascript">
        var viewModel = {
            wantsSpam: ko.observable(true),
            spamFlavor: ko.observable("almond") // Initially selects only the Almond radio button
        };
     
        // ... then later ...
        viewModel.spamFlavor("msg"); // Now only Monosodium Glutamate is checked
    </script>

    參數

    • 主要技術參數

      KO設置元素的選中狀態,以配合您的參數值。任何以前選中的狀態將被覆蓋。您的參數被解釋的方式取決於你綁定元素是什麼類型:

      • 對於覆選框,當參數值true時KO將設置為元素為選中狀態,當它為false則為未選中狀態。如果你給定的不是一個布爾值,KO會鬆散地解釋。這意味著,非零數字和非null對象和非空字元串都將被解釋為true,而零,nullundefined,和空字元串將被解釋為false

        當用戶選中或取消選中該覆選框,將KO你的模型屬性設置為truefalse

        如果你的參數解析為一個被給予array數組。在這種情況下,KO將設置檢查DOM中value屬性是否與數組值匹配,如果值匹配則被選中,如果不匹配則不勾選。

        當用戶選中或取消選中該覆選框,將KO更改對應視圖模型屬性的值。就像示例2一樣。

      • 對於單選按鈕,KO將檢查視圖模型的值是否等於單選按鈕DOM節點的value屬性或檢查視圖模型屬性值是否等於checkedValue參數指定的值。就像示例3一樣。

        當選擇了用戶改變其單選按鈕,KO會設置模型屬性值為選定的單選按鈕的值。像示例3中,點擊value="cherry"的單選按鈕後將設置viewModel.spamFlavor"cherry"

      如果你的參數是監控屬性類型,每當值改變綁定將更新元素的選中狀態。如果該參數是非監控屬性,它只會在首次運行時設置元素的選中狀態,以後再不會更新。

    • 其他參數

      • checkedValue

        checkedValue參數定義了使用值與checked綁定結合,而不是元素的value屬性。如果你想要的值是一個字元串(如整數或對象)以外的東西,或者你想動態設置的值,這非常有用。

        例如下邊的例子:

        源碼:

  • <!-- ko foreach: items -->
        <input type="checkbox" data-bind="checkedValue: $data, checked: $root.chosenItems" />
        <span data-bind="text: itemName"></span>
    <!-- /ko -->
     
    <script type="text/javascript">
        var viewModel = {
            items: ko.observableArray([
                { itemName: 'Choice 1' },
                { itemName: 'Choice 2' }
            ]),
            chosenItems: ko.observableArray()
        };
    </script>

    如果你的checkedValue參數是一個監控屬性,當值的變化和元素是否被選中,綁定將更新checked模型屬性。對於覆選框,它會從數組刪除舊值並添加新的價值。對於單選按鈕,它只會更新模型值。


    您的分享是我們最大的動力!

    -Advertisement-
    Play Games
    更多相關文章
    • 下麵賦上代碼對應的文件路徑 ...
    • atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性 1.1. Servlet和JSP規範版本對應關係:1 1.2. Servlet2.5一些變化的介紹: 1 1.3. Jsp2.02 1.4. Jsp2.12 1.5. Jsp2.2 ( ...
    • 在寫介面實現時,有時會有多個實現類。這篇文章介紹在調用時通過傳入字元串來指定具體的實現類。 一.介面與實現類: 在實現類中重寫了toString() 方法,可以自定義字元串,當調用時傳入指定的字元串就能獲取到相應的bean。 二.register書寫: 三.測試類: 運行結果,如圖: 備註: 在sp ...
    • 一 PYTHON 安裝 1. Python下載 (1) www.python.org官網 (2) 選擇可執行文件( 64位3.5.2Windows x86-64 executable installer或32位3.5.2 Windows x86 executable installer)、(64位2 ...
    • 一、簡述 1.對象關係映射文件,用於映射實體類和關係資料庫數據表之間的一個 xml 文件。 2.通過 Entity.hbm.xml 映射文件,Hibernate 可以理解持久化類和數據表之間的對應關係,也可以理解持久化類屬性與數據表列之間的對應關係。 3.映射主鍵、映射關聯關係。 二、各個節點 說明 ...
    • Atitit.java c#.net php項目中的view復用(jsp,aspx,php的復用) 1.1. Keyword1 1.2. 前言1 2. Java項目使用。Net的aspx頁面view1 2.1. Aspx的顯示源碼解決之道1 2.2. Get path n param2 2.3. 還 ...
    • 每天一個設計模式-2 外觀模式(Facade) 1.生活中的示例 客戶想要購買一臺電腦,一般有兩種方法: 1.自己DIY,客戶需要知道組成電腦的所有電子器件,並且需要熟悉那些配件,對客戶要求較高。 2.去電腦組裝公司,告訴他們你需要的電腦配置,再由電腦組裝公司的人來組裝電腦,這種方式比較簡單通用,現 ...
    • 開本系列,談談一些有趣的 CSS 題目,題目類型天馬行空,想到什麼說什麼,不僅為了拓寬一下解決問題的思路,更涉及一些容易忽視的 CSS 細節。 解題不考慮相容性,題目天馬行空,想到什麼說什麼,如果解題中有你感覺到生僻的 CSS 屬性,趕緊去補習一下吧。 不斷更新,不斷更新,不斷更新,重要的事情說三遍 ...
    一周排行
      -Advertisement-
      Play Games
    • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
    • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
    • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
    • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
    • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
    • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
    • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
    • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
    • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
    • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...