KnockoutJS 3.X API 第四章 表單綁定(9) value綁定

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

目的 value綁定主要用於DOM元素給視圖模型賦值用的。通常用於 有很多時候,我們希望下拉列表中包含一個空白的或者沒有包含在數據集合中的元素,比如choose one…,那麼就可以使用valueAllowUnset:true來帶到目的。如上述例子一樣。 selectedCountry將保留Latv... ...


目的

value綁定主要用於DOM元素給視圖模型賦值用的。通常用於<input><select><textarea>等元素。

value綁定與text綁定的區別在於,value綁定中當用戶編輯表單控制項相關值的時候,值會自動更新視圖模型的相關屬性值,當視圖模型的相關屬性值被更新後,表單中相關的value綁定也會隨之變化。

value綁定就像DOM和ViewModel的一個雙向通道。而text綁定只是ViewModel到DOM的單向通道。

例如:

<p>Login name: <input data-bind="value: userName" /></p>
<p>Password: <input type="password" data-bind="value: userPassword" /></p>
 
<script type="text/javascript">
    var viewModel = {
        userName: ko.observable(""),        // Initially blank
        userPassword: ko.observable("abc"), // Prepopulate
    };
</script>

一些細節

主要技術細節:

  1. KO將會使用初始值設置value綁定的元素。當有新的值的時候,初始值將被覆蓋
  2. 如果value綁定的是監控屬性,那麼之後的屬性值更新就會被體現在DOM的value綁定上,如果不是監控屬性,則只有第一次運行會更新DOM上的value綁定的值,之後就不會再變了。
  3. 如果你的value綁定不是數值型或字元型數據(例如一個對象或數組),那顯示的文本內容將等同於yourParameter.toString()。最好還是綁定值型或字元型數據。
  4. 當用戶編輯表單控制項修改基於value綁定的元素值並移出焦點後,KO就會自動更新對應的視圖模型的屬性值,你也可以通過使用valueUpdate事件來控制。

其他技術細節:

  1. valueUpdate,KO定義了一系列的change事件,最常用包括如下事件:
    • "input"-<input><textarea>元素的變化更新您的視圖模型時的值。
    • "keyup" - 當用戶釋放某個鍵更新您的視圖模型
    • "keypress"-當用戶輸入一個值更新您的視圖模型。不像keyup,這個會反覆更新
    • "afterkeydown"-當用戶開始輸入一個字元儘快更新您的視圖模型。這通過捕獲瀏覽器的keydown事件,並非同步處理該事件。這個事件在一些移動客戶端可能不會起什麼作用。
  2. valueAllowUnset,適用於<select>的value綁定,其他元素不起作用,具體請參考之後的備註2.

備註1:實時更新

如果你想要實時更新<input>或者<textarea>到你的視圖模型,可以使用textInput綁定。具體的textInput細節將在之後的章節提到。

備註2:下拉列表<select>的綁定

KO在下拉列表綁定中,需要使用value綁定和options綁定(options綁定將在以後的章節中提到)。

使用valueAllowUnset與<select>元素

Select a country:

源碼:

<p>
    Select a country:
    <select data-bind="options: countries,
                       optionsCaption: 'Choose one...',
                       value: selectedCountry,
                       valueAllowUnset: true"></select>
</p>
 
<script type="text/javascript">
    var viewModel = {
        countries: ['Japan', 'Bolivia', 'New Zealand'],
        selectedCountry: ko.observable('Latvia')
    };
</script>

有很多時候,我們希望下拉列表中包含一個空白的或者沒有包含在數據集合中的元素,比如choose one…,那麼就可以使用valueAllowUnset:true來帶到目的。如上述例子一樣。

selectedCountry將保留Latvia,並將下拉列表中空白匹配給它。

備註3:綁定監控屬性和非監控屬性

如果你使用value綁定的是一個監控屬性,KO是能夠建立一個雙向綁定。

但是如果value綁定是一個非監控屬性,則KO會進行以下處理:

  • 如果引用一個簡單的屬性,也就是說,它只是在你的視圖模型一個普通的屬性,表單元素編輯時KO將設置表單元素的初始狀態屬性值。

例如:

First value:

First value:

Second value:

Second value:

Third value:

源碼:

<p>First value: <input data-bind="value: firstValue"></p>
<p>First value:<span data-bind="text:firstValue"></span></p>
<!-- One-way binding. Populates textbox; syncs only from textbox to model. -->
<p>Second value: <input data-bind="value: secondValue"></p>
<p>Second value: <span data-bind="text: secondValue"></span></p>
<!-- No binding. Populates textbox, but doesn't react to any changes. -->
<p>Third value: <input data-bind="value: secondValue.length &gt; 8"></p>
<script type="text/javascript">
    var viewModel = {
        firstValue: ko.observable("hello"), // Observable
        secondValue: "hello, again"         // Not observable
    };
    ko.applybindings(viewModel,document.getElementById("eq2"));
</script>

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

-Advertisement-
Play Games
更多相關文章
  • 每天一個設計模式-1 簡單工廠 1.簡單工廠的定義 提供一個創建對象實例的功能,而無須關心其具體實現(核心)。 雖然不能讓模塊外部知道模塊內部的具體實現,但模塊內部是可以知道具體實現類的。乾脆在模塊內部建一個類,用這個類來創建介面,然後把創建號的介面返回給客戶端;這樣,外部應用就只需要根據這個類來獲 ...
  • Atitit Atitit.軟體相容性原理 API相容 Qa7 1. 相容性的重要性與反面教材1 2. 提升相容性的原則2 2.1. What 與how 分離2 2.2. 老人老辦法,新人新辦法,只新增,少修改,莫刪除3 2.3. 計劃趕不上變化,永遠api修改也不可能整齊劃一,反而帶來不相容的風險 ...
  • 回到目錄 對於IoC容器來說,性能最好的莫過於Autofac了,而對於靈活度來說,它也是值得稱贊的,為了考慮系統的性能,我們經常是在系統初始化於將所有依賴註冊到容器里,當需要於根據別名把實現拿出來,然後再使用即可;而如果每次使用都是註冊-反射,我相信那是很耗性能的,所以我們決定先依賴一次註冊,按需反 ...
  • SpringBootService,這是一個spring boot微服務的框架,包括redis,mq,restful,定時器,mybatis。易擴容、易維護的架構。 項目說明 該項目使用maven進行管理,可直接在maven projects下Plugins的spring-boot中運行.切記勿忘數 ...
  • XML語言 什麼是XML? XML是指可擴展標記語言(eXtensible Markup Language),它是一種標記語言,很類似HTML。它被設計的宗旨是傳輸數據,而非顯示數據。 XML標簽沒有被預定義,需要用戶自行定義標簽。 XML技術是W3C組織(World Wide Web Consor ...
  • 一、什麼是設計模式 在軟體開發中,設計模式是對軟體設計中普遍存在的一些問題,所使用的解決方案 也就是說:設計模式是一套被反覆使用、多數人知曉的、經過分類的、代碼設計的 經驗的總結 使用設計模式可以達到代碼重用,讓代碼閱讀性更高,同時保證了代碼的可靠性。 由於java種具有23種設計模式,但都遵循著6 ...
  • 最近一直在研究javascript腳本,熟悉DOM中CSS樣式的各種定位屬性,以前對這個屬性不太瞭解,從網上找到兩篇文章感覺講得很透徹,收藏下來,唯恐忘記。一.解讀absolute與relative http://www.blueidea.com/tech/web/2006/4249.asp很多朋友 ...
  • 近期,面試我們總會遇到這樣一個面試題: 現在網上答案很多苟同,但是我還是想在重覆的述說一遍,俗話說:好記憶不如爛筆頭, 雖然常見,簡單,反覆出現,總之,在簡單的多寫寫記憶還是很深刻的,即使忘了,也能拿出來翻翻。 代碼如下:(簡單些) html代碼 <ul> <li>香蕉</li> <li>蘋果</l ...
一周排行
    -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# ...