控制流

foreach bind

1.示例

<h4>People</h4> 
<ul data-bind="foreach:people">
    <li>
        Name at position <span data-bind="text:$index"></span>:
        <span data-bind="text:name"></span>
        <a href="#" data-bind="click:$parent.removePerson">Remove</a>
    </li>
</ul>
<button data-bind="click:addPerson">Add</button>

    function ViewModel(){
        var self = this;

        self.people = ko.observableArray([
            {name:"Britney"},
            {name:"Bryant"},
            {name:"Adele"}
        ]);

        self.removePerson = function(){
            self.people.remove(this);
        };

        self.addPerson = function(){
            self.people.push({name:"Ellie comes at " + new Date().toLocaleString()});
        };

    }

    ko.applyBindings(new ViewModel());

2.不带元素的绑定

<ul>
    <li>Header item</li>
    <!-- ko foreach:myItems -->
        <li>Item <span data-bind="text:$data"></span></li>
    <!-- /ko -->
</ul>

 ko.applyBindings({
    myItems:['A','B','C','D']
 });

if bind

1.绑定示例

<ul data-bind="foreach:countries">
    <li>
         Country:<span data-bind="text:name"></span>
        <div data-bind="if:capital,style:{display:'inline-block'}">
            Capital:<span data-bind="text:capital.cityName"></span>
        </div>
    </li>
</ul>
    ko.applyBindings({
        countries:[
            {name:'中国',capital:{cityName:'北京'}},
            {name:'美国',capital:{cityName:'华盛顿'}},
            {name:'香港',capital:null},
            {name:'日本',capital:{cityName:'东京'}}
        ]
    });

if 绑定是很重要的,它能让代码正常工作。 比如上面的例子,如果没有 if 绑定, 那么当 capital 为空的时候, 子节点 capital.cityName 这个属性是不存在的,代码会报错。

2.使用表达式进行if绑定

<ul> 
    <li>This item always appears</li> 
    <!-- ko if: someExpressionGoesHere --> 
        <li>I want to make this item present/absent dynamically</li>
    <!-- /ko -->
</ul>

如果表达式包含 observable 变量,那么当变量值重新计算时,表达式的值也会被重新计算。相应的,当表达式的值被重新计算后 ,if 里面的代码块会被重新添加或者移除 。当重新添加代码块时,data-bind 属性会被应用到原来代码的新拷贝上。

ifnot bing

if 绑定的表达式取反
恩 就这么简单!!!

with bind

<form  data-bind="submit:login,if:showInput">
    用户名:<input  data-bind="value:userName,event:{focus:clearInput}" /><br><br>
    密码:<input type="password" data-bind="value:psw"><br><br>
    <button type="submit">登录</button>
</form>

<div data-bind="with:userInfo">
    <h3>欢迎回来,上次登录时间为: <span data-bind="text:lastLoginDate"></span></h3>
    <ol data-bind="foreach:userInfoData">
        <li data-bind="text:text"></li>
    </ol>

    <button data-bind="click:$parent.signOut">退出登录</button>
</div>


function ViewModel(){
    var self=this;
        
    //监控用户填入的用户名和密码
    self.userName = ko.observable('请输入用户名');
    self.psw = ko.observable();
    //用户明细监控
    self.userInfo = ko.observable();
            
    //通过if绑定来控制登录表单的显示与否
    self.showInput = ko.observable(true);
    //点击登录按钮时触发表单的提交事件
    self.login = function(){
        var username = self.userName();
        var loginLog = [
            {text:username +' 今天是星期'+(new Date().getDay()+1)},
            {text:username +' 美好的一天从这里开始'},
            {text:username+' 祝您生活愉快!'}
        ];
        //向用户信息userInfo 中写入信息
        self.userInfo({lastLoginDate:new Date().toLocaleString(),userInfoData:loginLog});
        //登录成功后,隐藏form表单
        self.showInput(false);
    }
    //绑定退出登录
    self.signOut = function(){
        alert("确定退出吗?");
        //清空userInfo
        self.userInfo(undefined);
        //退出登录后显示登录表单
        self.showInput(true);
    }

    //绑定focus事件,当用户聚焦用户名输入框时,清除input中的内容
    self.clearInput = function(){
        self.userName('');
    }
}

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行...
    穷人家的孩纸阅读 690评论 1 1
  • 本章将会介绍 控制流For-In 循环While 循环If 条件语句Switch 语句控制转移语句 continu...
    寒桥阅读 711评论 0 0
  • Swift提供了多种控制流声明。包括while循环来多次执行一个任务;if,guard和switch声明来根据确定...
    BoomLee阅读 1,931评论 0 3
  • 终于在一个下雨的中午读完了这本书,以前读这本书总是被打断,刚刚燃起的阅读的快感瞬间消失,中午有阳光,突然狂风大作,...
    ba64aae76ae0阅读 253评论 0 2