快递袋厂家
免费服务热线

Free service

hotline

010-00000000
快递袋厂家
热门搜索:
成功案例
当前位置:首页 > 成功案例

看一看:Knockout应用开发指南之Hello World

发布时间:2022-04-02 09:16:42 阅读: 来源:快递袋厂家
Knockout应用开发指南之Hello World 作者:汤姆大叔 2011-12-05 15:44:45 开发 前端 本章展示的4个例子主要是利用了Knockout的基本语法特性,让大家感受到使用Kncokout的快感。

本章展示的4个例子主要是利用了Knockout的基本语法特性,让大家感受到使用Kncokout的快感。

1 Hello world

这个例子里,2个输入框都被绑定到data model上的observable变量上。,full name显示的是一个dependent observable,它的值是前面2个输入框的值合并一起的结果。

无论哪个输入框更新,都会看到,full name 显示结果都会自动更新。查看HTML源代码可以看到我们不需要声明onchange事件。Knockout知道什么时候该更新UI。

代码: View

  1. <p>Firstname:<inputdata-bind="value:firstName"/></p>
  2. <p>Lastname:<inputdata-bind="value:lastName"/></p>
  3. <h2>Hello,<spandata-bind="text:fullName"></span>!</h2>

代码: View model

  1. //这里是声明的viewmodel
  2. varviewModel={
  3. firstName:ko.observable("Planet"),
  4. lastName:ko.observable("Earth")
  5. };
  6. viewModel.fullName=ko.dependentObservable(function(){
  7. //Knockouttracksdependenciesautomatically.
  8. //ItknowsthatfullNamedependsonfirstNameandlastName,
  9. //becausethesegetcalledwhenevaluatingfullName.
  10. returnviewModel.firstName()+""+viewModel.lastName();
  11. });
  12. ko.applyBindings(viewModel);//ThismakesKnockoutgettowork

2 Click counter

这个例子展示的创建一个view model并且绑定各种绑定到HTML元素标记上,以便展示和修改view model的状态。

Knockout根据依赖项。在内部,hasClickedTooManyTimes在numberOfClicks上有个订阅,以便当numberOfClicks改变的时候农村房子被强拆要找谁投诉,强制hasClickedTooManyTimes重新执行。相似的,UI界面上多个地方引用hasClickedTooManyTimes,所以当hasClickedTooManyTimes 改变的时候,也讲导致UI界面更新农村旧房会被强拆吗

不需要手工声明或者订阅这些subscription订阅,他们由KO框架自己创建和销毁。参考如下代码实现:

代码: View

  1. <div>You'veclicked<spandata-bind="text:numberOfClicks">&nbsp;</span>times</div>
  2. <buttondata-bind="click:registerClick,enable:!hasClickedTooManyTimes()">Clickme</button>
  3. <divdata-bind="visible:hasClickedTooManyTimes">
  4. That'stoomanyclicks!Pleasestopbeforeyouwearoutyourfingers.
  5. <buttondata-bind="click:function(){numberOfClicks(0)}">Resetclicks</button>
  6. </div>

代码: View model

  1. varclickCounterViewModel=function(){
  2. this.numberOfClicks=ko.observable(0);
  3. this.registerClick=function(){
  4. this.numberOfClicks(this.numberOfClicks()+1);
  5. }
  6. this.hasClickedTooManyTimes=ko老百姓的住宅可以强拆吗.dependentObservable(function(){
  7. returnthis.numberOfClicks()>=3;
  8. },this);
  9. };
  10. ko.applyBindings(newclickCounterViewModel());

3 Simple list

这个例子展示的是绑定到数组上。

注意到,只有当你在输入框里输入一些值的时候,Add按钮才可用。参考下面的HTML代码是如何使用enable 绑定。

代码: View

  1. <formdata-bind="submit:addItem">
  2. Newitem:
  3. <inputdata-bind='value:itemToAdd,valueUpdate:"afterkeydown"'/>
  4. <buttontype="submit"data-bind="enable:itemToAdd().length>0">Add</button>
  5. <p>Youritems:</p>
  6. <selectmultiple="multiple"width="50"data-bind="options:items"></select>
  7. </form>

代码: View model

  1. varviewModel={};
  2. viewModel.items=ko.observableArray(["Alpha","Beta","Gamma"]);
  3. viewModel.itemToAdd=ko.observable("");
  4. viewModel.addItem=function(){
  5. if(viewModel.itemToAdd()!=""){
  6. viewModel.items.push(viewModel.itemToAdd());
  7. //Addstheitem.Writingtothe"items"observableArraycausesanyassociatedUItoupdate.
  8. viewModel.itemToAdd("");
  9. //Clearsthetextbox,becauseit'sboundtothe"itemToAdd"observable
  10. }
  11. }
  12. ko.applyBindings(viewModel);

4 Better list

这个例子是在上个例子的基础上添加remove item功能(multi-selection)和排序功能。 ,remove和,sort按钮在不能用的时候会变成disabled状态(例如,没有足够的item来排序)。

参考HTML代码是如何实现这些功能的,另外这个例子也展示了如何使用匿名函数来实现排序。

代码: View

  1. <formdata-bind="submit:addItem">
  2. Additem:<inputtype="text"data-bind='value:itemToAdd,valueUpdate:"afterkeydown"'/>
  3. <buttontype="submit"data-bind="enable:itemToAdd().length>0">Add</button>
  4. </form>
  5. <p>Yourvalues:</p>
  6. <selectmultiple="multiple"height="5"data-bind="options:allItems,selectedOptions:selectedItems"></select>
  7. <div>
  8. <buttondata-bind="click:removeSelected,enable:selectedItems().length>0">Remove</button>
  9. <buttondata-bind="click:function(){allItems.sort()},enable:allItems().length>1">Sort</button>
  10. </div>

代码: View model

  1. //Inthisexample,betterListModelisaclass,andtheviewmodelisaninstanceofit.
  2. //SeesimpleList.htmlforanexampleofhowtoconstructaviewmodelwithoutdefiningaclassforit.Eithertechniqueworksfine.
  3. varbetterListModel=function(){
  4. this.itemToAdd=newko.observable("");
  5. this.allItems=newko.observableArray(["Fries","EggsBenedict","Ham","Cheese"]);
  6. //Initialitems
  7. this.selectedItems=newko.observableArray(["Ham"]);
  8. //Initialselection
  9. this.addItem=function(){
  10. if((this.itemToAdd()!="")&&(this.allItems.indexOf(this.itemToAdd())<0))
  11. //Preventblanksandduplicates
  12. this.allItems.push(this.itemToAdd());
  13. this.itemToAdd("");//Clearthetextbox
  14. }
  15. this.removeSelected=function(){
  16. this.allItems.removeAll(this.selectedItems());
  17. this.selectedItems([]);//Clearselection
  18. }
  19. };
  20. ko.applyBindings(newbetterListModel());

原文:http://www.cnblogs.com/TomXu/archive/2011/11/30/2257067.html

【系列文章】

  1. 用JavaScript评估用户输入密码的强度(Knockout版)
  2. Knockout应用开发指南之创建自定义绑定
  3. Knockout应用开发指南之模板绑定
  4. Knockout应用开发指南之绑定语法
  5. Knockout应用开发指南之监控属性(Observables)
  6. Knockout应用开发指南之入门介绍