补充上个监控数组ko.observableArray()

ko常用的绑定:text绑定,样式绑定,数据数组绑定、 visible 绑定、属性绑定

1.visible绑定

<div data-bind="visible: shouldShowMessage">
你可以看见我,在js里面设置
</div>
<script>
var viewModel = {
shouldShowMessage: ko.observable(true) // Message initially visible
};
viewModel.shouldShowMessage(false); // ... now it's hidden
viewModel.shouldShowMessage(false);
ko.applyBindings(viewModel);
</script>

 data-bind="visible: myValues().length > 0"绑定的时候也可以用是一个数组的长度判断

2.text绑定

Today's message is: <span data-bind="text: myMessage"></span>
<script>
var viewModel = {
myMessage: ko.observable() // Initially blank
};
viewModel.myMessage("Hello, world!"); // Text appears
ko.applyBindings(viewModel);

使用函数对text进行绑定

var viewModel = {        price: ko.observable(24.95)    };

    viewModel.priceRating = ko.dependentObservable(function () {        returnthis.price() >50?"expensive" : "affordable";    }, viewModel);或者直接使用data-bind绑定三目运算
 data-bind="text: price() > 50 ? 'expensive' : 'affordable'"

3.css绑定

var viewModel = {
currentProfit: ko.observable(150000)
// Positive value, so initially we don't apply the "profitWarning" class
};

viewModel.currentProfit(-230);

4.style绑定

<div data-bind="style: { color: currentProfit() < 0 ? 'red' : 'black' }">   Profit Information</div>

<script type="text/javascript">    var viewModel = {        currentProfit: ko.observable(150000) // Positive value, so initially black    };    viewModel.currentProfit(-50); // Causes the DIV's contents to go red</script>5.attr绑定
<a data-bind="attr: { href: url, title: details }">    Report</a>

<script type="text/javascript">    var viewModel = {        url: ko.observable("year-end.html"),        details: ko.observable("Report including final year-end statistics")    };</script>6.click绑定

<div>
You've clicked <span data-bind="text: numberOfClicks"></span> times
<button data-bind="click: incrementClickCounter">Click me</button>
</div>
<script>
var viewModel = {
numberOfClicks: ko.observable(0),
incrementClickCounter: function () {
var previousCount =this.numberOfClicks();
this.numberOfClicks(previousCount +1);
}
};//声明的函数不一定是在viewmodel中,也可以直接写成一个普通函数
ko.applyBindings(viewModel);

以匿名函数的方式传参

<div>
You've clicked <span data-bind="text: numberOfClicks"></span> times
<button data-bind="click: function() { viewModel.myFunction('param1', 'param2') }">Click me</button>
</div>
<script>
var viewModel = {
numberOfClicks: ko.observable(0),
myFunction:function(q,w){
console.log(q)
console.log(w)
}
};
ko.applyBindings(viewModel);

默认情况下,Knockout会阻止冒泡,防止默认的事件继续执行。例如,如果你点击一个a连接,在执行完自定义事件时它不会连接到href地址。这特别有用是因为你的自定义事件主要就是操作你的view model,而不是连接到另外一个页面。默认情况下,Knockout允许click事件继续在更高一层的事件句柄上冒泡执行。例如,如果你的元素和父元素都绑定了click事件,那当你点击该元素的时候两个事件都会触发的。如果需要,你可以通过额外的绑定clickBubble来禁止冒泡

<button data-bind="click: myButtonHandler, clickBubble: false">        Click me    </button>7event绑定大部分情况下是键盘事件、鼠标事件
<div>    <div data-bind="event: { mouseover: enableDetails, mouseout: disableDetails }">        Mouse over me    </div>    <div data-bind="visible: detailsEnabled">        Details    </div></div>

<script type="text/javascript">    var viewModel = {        detailsEnabled: ko.observable(false),        enableDetails: function () {            this.detailsEnabled(true);        },        disableDetails: function () {            this.detailsEnabled(false);        }    };</script>访问源对象
<div data-bind="event: { mouseover: myFunction }">    Mouse over me</div>

 //通过event获取 <script type="text/javascript">     var viewModel = {         myFunction: function (event) {             if (event.shiftKey) {                 //do something different when user has shift key down             } else {                 //do normal action             }         }     };</script>
注:如果允许执行默认事件执行,只要在自定义事件里,对event返回为true

8.enable绑定enable绑定使DOM元素只有在参数值为 true的时候才enabled。在form表单元素input,select,和textarea上非常有用。

<p>
<input type='checkbox' data-bind="checked: hasCellphone"/>
I have a cellphone
</p>

<p>
Your cellphone number:
<input type='text' data-bind="value: cellphoneNumber, enable: hasCellphone"/>
<button data-bind="click:indexme">点我</button>
</p>
<script>
var viewModel = {
hasCellphone: ko.observable(false),
cellphoneNumber: ""
};
function indexme(){
console.log(viewModel.cellphoneNumber)
}
ko.applyBindings(viewModel);

disable绑定使DOM元素只有在参数值为 true的时候才disabled。在form表单元素input,select,和textarea上非常有用。

disable绑定和enable绑定正好相反,详情请参考enable绑定。

9.value绑定

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

特殊参数   valueUpdate

  • 默认“change”事件,自动更新
  • ‘keyup’
  • 'keypress'
  • 'afterkeydown'

例子

<p>Your value: <input data-bind="value: someValue, valueUpdate: 'afterkeydown'"/></p><p>You have typed: <span data-bind="text: someValue"></span></p> <!-- updates in real-time --> 

<script type="text/javascript">    var viewModel = {        someValue: ko.observable("edit me")    };</script>

10 check绑定注:对text box,drop-down list和所有non-checkable的form表单控件,用value绑定来读取和写入是该元素的值,而不是checked绑定
<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>绑定数组

<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>
var viewModel = {
wantsSpam: ko.observable(true),
spamFlavors: ko.observableArray(["cherry", "almond"]) // Initially checks the Cherry and Almond checkboxes
};

// ... then later ...
viewModel.spamFlavors.push("msg");
ko.applyBindings(viewModel);

radio绑定

<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>
var viewModel = {
wantsSpam: ko.observable(true),
spamFlavor: ko.observable("almond") // Initially selects only the Almond radio button
};
// ... then later ...
viewModel.spamFlavor("msg");
ko.applyBindings(viewModel);

11.options绑定

例子1

<p>Destination country: <select data-bind="options: availableCountries"></select></p>

<script type="text/javascript">    var viewModel = {        availableCountries: ko.observableArray(['France', 'Germany', 'Spain']) // These are the initial options    };

    // ... then later ...    viewModel.availableCountries.push('China'); // Adds another option</script>例子2
<p>Choose some countries you'd like to visit: <select data-bind="options: availableCountries" size="5" multiple="true"></select></p>

<script type="text/javascript">    var viewModel = {        availableCountries: ko.observableArray(['France', 'Germany', 'Spain'])    };</script>例子3
<p>    Your country:    <select data-bind="options: availableCountries,               optionsText: 'countryName', value: selectedCountry, optionsCaption: 'Choose...'"></select></p>

<div data-bind="visible: selectedCountry"> <!-- Appears when you select something -->    You have chosen a country with population    <span data-bind="text: selectedCountry() ? selectedCountry().countryPopulation : 'unknown'"></span>.</div>

<script type="text/javascript">    // Constructor for an object with two propertiesvar country =function (name, population) {        this.countryName = name;        this.countryPopulation = population;    };

     var viewModel = {        availableCountries: ko.observableArray([            new country("UK", 65000000),            new country("USA", 320000000),            new country("Sweden", 29000000)        ]),        selectedCountry: ko.observable() // Nothing selected by default    };</script>例子4

<p>
Your country:
<select data-bind="options: availableCountries,
              optionsText: 'countryName', value: selectedCountry, optionsCaption: 'Choose...'"></select>
</p>

<div data-bind="visible: selectedCountry"> <!-- Appears when you select something -->
You have chosen a country with population
<span data-bind="text: selectedCountry() ? selectedCountry().countryPopulation : 'unknown'"></span>.
</div>
<script>
var country =function (name, population) {
this.countryName = name;
this.countryPopulation = population;
};

var viewModel = {
availableCountries: ko.observableArray([
new country("UK", 65000000),
new country("USA", 320000000),
new country("Sweden", 29000000)
]),
//selectedCountry是选择下拉框的value值
selectedCountry: ko.observable() // Nothing selected by default
};
ko.applyBindings(viewModel);

 

参数

主参数

该参数是一个数组(或者observable数组)。对每个item,KO都会将它作为一个<option> 添加到<select>里,之前的options都将被删除。

如果参数是一个string数组,那你不需要再声明任何其它参数。<select>元素会将每个string显示为一个option。不过,如果你让用户选择的是一个JavaScript对象数组(不仅仅是string),那就需要设置optionsText和optionsValue这两个参数了。

如果参数是监控属性observable的,那元素的options项将根据参数值的变化而更新,如果不是,那元素的value值将只设置一次并且以后不在更新。

其它参数

optionsCaption

有时候,默认情况下不想选择任何option项。但是single-select drop-down列表由于每次都要默认选择以项目,怎么避免这个问题呢?常用的方案是加一个“请选择的”或者“Select an item”的提示语,或者其它类似的,然后让这个项作为默认选项。

我们使用optionsCaption参数就能很容易实现,它的值是字符串型,作为默认项显示。例如:

<select data-bind='options: myOptions, optionsCaption: "Select an item...", value: myChosenValue'></select>

KO会在所有选项上加上这一个项,并且设置value值为undefined。所以,如果myChosenValue被设置为undefined(默认是observable的),那么上述的第一个项就会被选中。

optionsText

上面的例3展示的绑定JavaScript对象到option上 – 不仅仅是字符串。这时候你需要设置这个对象的那个属性作为drop-down列表或multi-select列表的text来显示。例如,例3中使用的是设置额外的参数optionsText将对象的属性名countryName作为显示的文本。

如果不想仅仅显示对象的属性值作为每个item项的text值,那你可以设置optionsText 为JavaScript 函数,然后再函数里通过自己的逻辑返回相应的值(该函数参数为item项本身)。例4展示的就是返回item的2个属性值合并的结果。

optionsValue

和optionsText类似, 你也可以通过额外参数optionsValue来声明对象的那个属性值作为该<option>的value值。

经典场景:如在更新options的时候想保留原来的已经选择的项。例如,当你重复多次调用Ajax获取car列表的时候,你要确保已经选择的某个car一直都是被选择上,那你就需要设置optionsValue为“carId”或者其它的unique标示符,否则的话KO找不知道之前选择的car是新options里的哪一项。

selectedOptions

对于multi-select列表,你可以用selectedOptions读取和设置多个选择项。技术上看它是一个单独的绑定,有自己的文档,请参考: selectedOptions绑定。

注:已经被选择的项会再options改变的时候保留

当使用options绑定<select>元素的时候,如果options改变,KO将尽可能第保留之前已经被选择的项不变(除非是你事先手工删除一个或多个已经选择的项)。这是因为options 绑定尝试依赖value值的绑定(single-select列表)和selectedOptions绑定(multi-select列表)。

转载于:https://www.cnblogs.com/0828-li/p/8409143.html

ko学习二,绑定语法相关推荐

  1. Vue学习(二)-胡子({{}})语法

    一,插值操作 这种语法叫做 Mustache 语法 中文叫做胡子的意思,两个 {{}} 长的比较像胡子,所以这样命名了 <body><div id="app"&g ...

  2. 学习Kotlin(二)基本语法

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  3. Docker学习二:Docker镜像与容器

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  4. mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...

    MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...

  5. Js基础引导(二)——语法

    朋友,你好. 欢迎进入JS基础引导--语法篇,本篇内容是JS的基本概念(常识) 语法: JS语法大量借鉴了其他C语言或者类C语言(如java),因此,熟悉这些语言对于学习JS会很轻松,同样的,会了JS ...

  6. JS高级的学习(二)

    JS高级的学习(二) set对象 Set 是一个对象 存放数据 数据永远不会重复 Set 当成是一个数组 遍历 使用 数组方法 find findIndex Map 数组转成 Set对象 const ...

  7. python pyramid基础学习二

    python pyramid基础学习二 1.前言 前面我们使用了基础命令创建pyramid项目,并运行了Hello word,万事开头难,我们知道了开发pyramid项目需要一个env文件夹,里面包 ...

  8. AFL(american fuzzy lop)学习二

    AFL(american fuzzy lop)学习二 @sizaif @2022-04-10 设计思想 覆盖率计算 改进边缘覆盖: 向目标程序注入以下工具来捕获分支(边缘)覆盖率和分支命中计数 一条边 ...

  9. Verilog基础学习二

    Verilog基础学习二 文章目录 Verilog基础学习二 一.always 块 1.阻塞性赋值和非阻塞性赋值 二.条件语句 1.if 语句 基本用法 2.避免引入锁存器 3.case 语句 4.c ...

最新文章

  1. es springboot 不设置id_原创 | 一篇解决Springboot 整合 Elasticsearch
  2. 阿里正式向 Apache Flink 贡献 Blink 源码
  3. 陶大程院士:深度学习“泛化”理论的回顾与前沿
  4. [Hadoop in China 2011] Facebook Message在HBase基础上的应用
  5. Hadoop2.7.3完全分布式搭建
  6. 二次元老婆生成器,想要什么样的老婆就靠自己勤劳的双手啦
  7. java能否访问PHP的服务器,PHP与Java进行通信的实现方法
  8. 全球与中国工业低压变频器市场十四五前景规划和远景目标建议报告2022-2028年版
  9. Vue中使用定时器setInterval和延迟执行setTimeout
  10. 如何遍历给定目录中的文件?
  11. 引用类型-Function类型
  12. zabbix监控oracle rac,CentOS6.9下zabbix3.4.9通过orabbix1.2.3来监控oracle11gRAC
  13. STM32F412 串口接收不到数据的问题
  14. iphone邮件服务器 263,在iphone上怎么设置263邮箱
  15. 58同城、前程无忧在前,快手做招聘能否弯道超车?
  16. 2022年江西最新建筑八大员(质量员)模拟考试题库及答案解析
  17. Android CardView卡片布局详解(八)
  18. 关于C#建立FLASH服务端的安全沙箱问题
  19. 集合论基本概念与其运算
  20. 构筑数字底座,同济医院用全闪存提速智慧医疗

热门文章

  1. 手把手教你搭建Jenkins+Jmeter+Ant自动化集成环境
  2. Redis 通配符查找及批量删除key
  3. 4位双扫描、8位单扫描
  4. EmbeddedBrowser
  5. Google Web Brower
  6. C中的位域与大小端问题
  7. ffmpeg h264 解码 转
  8. Ubuntu 15.10开机启动到命令行模式-转
  9. 【note】Swift之闭包表达式的几种简化缩写形式
  10. linux shell中怎样批量修改文件名为 文件夹_文件名