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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...