最近在学Knockout.js,想要把看到的东西用blog记录下来。

Knockout.js是一个MVVM的框架,突然想起之前有人问我哪些是MVVM框架?我回答了angular.js和bootstrap(糗),现在看了些博客,书,粗略的了解了MVVM是什么?

MVVM即Model,ViewModel,View

Model:数据模型

View:视图/UI

ViewModel:用于视图和模型的之间的数据传递。

我了解的MVVM是指大部分数据的处理用js完成,后台返回Model,通过ViewModel将数据绑定到UI。同时也可以在ViewModel中进行大部分的数据处理。有修改仅需修改ViewModel,非常方便。

Knockoutjs有监控,追踪的功能,即可以双向绑定数据。(之前的开发过程中有遇到页面没有刷新,也没有重新获取修改后数据导致后台拿到的还是修改之前的数据,这个bug找了蛮久,我觉得可以用knockoutjs双向绑定来解决)

双向绑定带来了一个好处,即不论是UI改变,还是后台传过来的Model有所变化,knockoutjs都能感知得到,这就是ko.observable(),ko.observabkeArray(),ko.computed()的功劳了。

下面看一段简单的程序:我要在页面上显示姓名,并且可以姓名可以随着我改变姓或者名而变化

<html>
<head>
<title>Kong's Website</title>
<script src="~/Scripts/knockout-3.5.1.js"></script>
<script src="~/Scripts/jquery-3.3.1.js"></script>
</head>
<body>
<p>firstName:<input type="text" data-bind="value:firstName" /></p>
<p>lastName:<input type="text" data-bind="value:lastName" /></p>
<p>firstName:<strong data-bind="text:firstName"></strong></p>
<p>lastName:<strong data-bind="text:lastName"></strong> </p>
</body>
</html> @section scripts{
<script>
function viewModel() {
var self = this;
self.firstName = ko.observable("Cherry");
self.lastName = ko.observable("Li");
}
var viewModel = new viewModel();
ko.applyBindings(viewModel);
</script>
}

我要显示全名 即 姓+名,只需要添加在lastName后面添加

    <p>fullName:<strong data-bind="text:fullName"></strong></p> 

在viewModel中添加

  self.fullName = ko.computed(function () {
return self.firstName() + " " + self.lastName();
});

比如我要在页面显示一个table

<html>
<head>
<title>Kong's Website</title>
<script src="~/Scripts/knockout-3.5.1.js"></script>
<script src="~/Scripts/jquery-3.3.1.js"></script>
</head>
<body>
<table>
<thead>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody data-bind="foreach:Person">
<tr>
<td data-bind="text:name"></td>
<td data-bind="text:type"></td>
</tr>
</tbody>
</table>
</body>
</html> @section scripts{
<script>
function viewModel() {
var self = this;
self.Person = ko.observableArray([
{ name: "Bungle", type: "Bear" },
{ name: "George", type: "Hippo" },
{ name: "Zippy", type: "Unknown" }
]);
}
var viewModel = new viewModel();
ko.applyBindings(viewModel);
</script>
}

 

Knockout.js之初印象的更多相关文章

  1. Vue.js之初印象

    一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称 ...

  2. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  3. Knockout.js初体验

    前不久在网上看到一个轻量级MVVM js类库叫Knockout.js,觉得很好奇,搜了一下Knockout.js相关资料,也初体验了一下,顿时感觉这个类库的设计很有意思.接下来就搞清楚什么是Knock ...

  4. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  5. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  6. MVVM大比拼之knockout.js源码精析

    简介 本文主要对源码和内部机制做较深如的分析,基础部分请参阅官网文档. knockout.js (以下简称 ko )是最早将 MVVM 引入到前端的重要功臣之一.目前版本已更新到 3 .相比同类主要有 ...

  7. 初印象至Vue路由

    初印象系列为快速了解一门技术的内容,后续会推出本人应用这门技术时发现的一些认识. Vue路由和传统路由的区别: Vue路由主要是用来实现单页面应用内各个组件之间的切换,同样支持传递参数等功能.而传统路 ...

  8. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

  9. 【原】Bootstrap+Knockout.JS+ASP.Net MVC3+PetaPOCO实现CRUD操作

    1.需求: 1.1)页面要美观大气 1.2)前端代码要简洁清晰,要用MVC或是MVVM框架 1.3)服务端要用MVC框架,要Rest风格 1.4)数据访问要用ORM 2.效果: 2.1)列表 2.2) ...

随机推荐

  1. @getMapping和@postMapping,@RestController 区别

    @getMapping和@postMapping,@RestController   @RequestMapping   和  @GetMapping @PostMapping 区别 @GetMapp ...

  2. 题解 UVa11752

    题目大意 输出所有小于 \(2^{64}-1\) 的正整数 \(n\), 使得 \(\exists p, q, a, b\in \mathbb{N+}, p\neq q\rightarrow a^p= ...

  3. php+tcpdf如何把生成的pdf文件保存在服务端

    tcpdf组件目前应用得非常广泛,但是对于如何把生成的pdf文件自动保存在服务端却很少有人提及.让我们先来看看标准输出代码:   //服务器存档模式 $pdf->Output('output.p ...

  4. width: calc(100% - 80px); 屏幕自适应方法

    width: calc(100% - 80px); 屏幕自适应方法

  5. 在WinDbg里使用MEX调试扩展

    简介 针对WinDbg的MEX调试扩展可以帮助您简化常见的调试器任务,并为调试器提供强大的文本筛选功能.此扩展被Microsoft支持工程师广泛用于解决流程应用程序的故障. 下载&安装 下载m ...

  6. luoguP1576 最小花费

    LOL新英雄皮肤弹丸天使点击就送 两种做法: 1.边的权值为手续费z,从b向a跑最短路,边跑边处理答案 2.边的权值为汇率,从a向b跑最短路,边跑边处理答案 #include<cstdio> ...

  7. 洛谷 题解 P3984 【高兴的津津】

    潇洒の开始 大水题一枚/小声说话 先吐槽一下: 为什么津津经历了魔鬼训练就可以Au日常QWQ,人家也是早起晚睡的好吧 (谁说魔鬼训练就一定是早起晚睡的) 思路 津津的高兴是持续m天的,但是一旦在这m中 ...

  8. Java int 与 Integer 区别

    学习借鉴(其实搬了别人的好多)和自己的理解,可能会有较多错误,如有疑问联系我呀. int  是基本数据类型, Integer 是引用类型,也就是一个对象. int 储存的是数值,Integer 储存的 ...

  9. [总结] MSF攻击数据库服务

    0x01 攻击Mysql服务 1.1 目标探测 auxiliary/scanner/mysql/mysql_version 常用于内网中的批量mysql主机发现: 1.2 爆破登录 auxiliary ...

  10. ssh修改默认远程端口

    ---------------------centos6-----------------1.查看系统版本cat /etc/redhot-releose 2.编辑sshd配置,修改默认的端口vim / ...