基础知识-属性方法的绑定

view model

//定义viewModel
    var viewModel={
        name:'lsz',
        age:'23'
    };
    //开始绑定
  ko.applyBindings(viewModel);

ko.applyBindings()有两个参数:

  • 第一个参数是用于绑定的对象。
  • 第二个参数(可选),可以指定使用knockout的DOM元素或者容器。

ko.applyBindings(viewModel,document,getElementById('div')),目前只有对id为div的元素和子元素生效。

data-bind

HTML的DOM对象通过data-bind属性来绑定数据

  • text绑定
    text使得该元素的文本值为绑定的参数值
<p data-bind="text:name"></p>
<p data-bind="text:age"></p>

参数值设置在指定DOM元素的innerText(IE)或textContent(Firefox)属性上。原来的文本将会被覆盖

  • value绑定
    关联DOM元素的值到view model的属性上。主要是用在表单控件input,select和textarea上。
<p data-bind="text:name"></p>
<input data-bind="value: name"/>
// js
  var viewModel={
       name:ko.observable('lsz')
    };
    ko.applyBindings(viewModel);
效果: 当input的值发生变化的时候,会给viewModel的name属性重新赋值,并在p标签中显示

)

  • visible绑定
    使该元素的hidden和visible状态取决于绑定的值
<div data-bind="visible:shouldShowMessage">
    当visible的值为true的时候,你才可以看到这句话
</div>

// js
var viewModel={
        shouldShowMessage:true 
    };

优先级高于css定义的任何display的样式

  • click绑定
    给元素添加点击事件
<button data-bind="click: clickFn">Click</button>
// js 
 var viewModel = {
        clickFn: function () {
           alert('click');
        }
    };
  • event绑定
    给元素添加指定的事件
<div data-bind="event: { mouseover: overFn, mouseout: outFn }">
    Mouse 
</div>
// js 
  var viewModel = {
        overFn: function () {
            alert('over');
        },
        outFn:function(){
            alert('out');
        }
    };
  • submit绑定
    绑定在form表单上添加指定的事件,使该form被提交的时候执行指定的函数
<form data-bind="submit: sub">
    ... form contents ...
    <button type="submit">submit</button>
</form>
// js 
 var viewModel={
        sub: function (formElement) {
            console.log(formElement); // 执行时,会将整个form表单元素传递到sub函数中
        }
    };

只能用在form表单上,当使用submit绑定的时候, knockout会阻止form表单默认的submit动作。

  • html绑定
    使该元素的HTML值为你绑定的参数值
<div data-bind="html:content">
    <p>原来的html结构</p>
</div>

// js 
  var viewModel={
        content:'<h1>标题一</h1>'
    };

参数值设置到指定DOM元素的innerHTML属性上,元素原来的内容将会被覆盖

  • css绑定
    添加或删除一个或多个class类名到指定DOM元素上
<style type="text/css">
    .bg{
        background: red;
    }
</style>
<div data-bind="css:{bg:flag}">
    <p>css绑定</p>
</div>

// js
    var viewModel={
        flag:true
    };
效果:当flag为true的时候,将bg这个类添加到指定DOM元素上。当flag为false的时候,将bg这个类从指定DOM元素上移除
  • style绑定
    style是添加或删除一个或多个DOM元素上的style值
<div data-bind="style:{background:flag?'red':'blue',color:flag?'blue':'red'}" >
    <p>内容</p>
</div>
  • attr绑定
    设置DOM元素的任何属性的值
<a data-bind="attr:{href:url,title:alt,self:self}">百度</a>
// js
 var viewModel={
       url:'https://www.baidu.com/',
       alt:'百度一下',
       self:'自定义属性值'
    };
效果:给a动态绑定了href和title属性已经自定义属性self的值
  • checked绑定
    用于checkbox和radio设置的绑定
<input type="checkbox" data-bind="checked: checkboxFlag"/>
<input type="radio" data-bind="checked: radioFlag" value="radioValue"/>
// js
   var viewModel={
        checkboxFlag: true,
        radioFlag:'radioValue'
    };
效果:当checkboxFlag为true的时候,对应的checkbox被选中。当radioFlag的值等于radio的value的值的时候,对应的元素被选中
  • options绑定
    控制下拉列表的内容,只能用于select元素
<select data-bind="options: options"></select>
// js
  var viewModel = {
        options: ['France', 'Germany', 'Spain']
    };

options给select标签增加了options元素,options默认会被展开

单向绑定

<p>姓名:<span data-bind="text:name"></span></p> 
// js 
var viewModel= {
      name:'lsz';
  }

双向绑定

<p>姓名:<span data-bind="text:name"></span></p> 
<p>姓名:<input type="text" data-bind="value:name"></p>
// js 
  var viewModel={
        name:ko.observable('lsz'),
    };

利用ko.observable()实现对属性的监控,当input的值发生改变的时候,span的值也会发生改变

依赖绑定

<p>姓名:<span data-bind="text:name"></span></p>
<p>年龄:<span data-bind="text:age"></span></p>
<p>姓名:<input type="text" data-bind="value:name"></p>
<p>年龄:<input type="text" data-bind="value:age"></p>
<p>姓名年龄:<span data-bind="text:nameAge"></span></p>
// js
  var viewModel={
        name:ko.observable('lsz'),
        age:ko.observable('23')
    };
    viewModel.nameAge=ko.computed(function () {
        return this.name()+this.age();
    },viewModel);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352