Knockoutjs:Component and Custom Elements(翻译文章)
Knockoutjs 的Components 是一种自定义的组件,它以一种强大、简介的方式将你自己的ui代码组织成一种单独的、可重用的模块,自定义的组件(Component)有以下特点:
- ko.components.register('like-widget', {
- viewModel: function(params) {
- // Data: value is either null, 'like', or 'dislike'
- this.chosenValue = params.value;
- // Behaviors
- this.like = function() { this.chosenValue('like'); }.bind(this);
- this.dislike = function() { this.chosenValue('dislike'); }.bind(this);
- },
- template:
- '<div class="like-or-dislike" data-bind="visible: !chosenValue()">\
- <button data-bind="click: like">Like it</button>\
- <button data-bind="click: dislike">Dislike it</button>\
- </div>\
- <div class="result" data-bind="visible: chosenValue">\
- You <strong data-bind="text: chosenValue"></strong> it\
- </div>'
- });
通常情况下,你需要引入外部文件来加载viewModel和模板,而不是像上面这样写到同一个文件里。稍后我们讲解怎么以引入外部文件的方式加载viewModel和template。
- <ul data-bind="foreach: products">
- <li class="product">
- <strong data-bind="text: name"></strong>
- <like-widget params="value: userRating"></like-widget>
- </li>
- </ul>
viewModelCode:
- function Product(name, rating) {
- this.name = name;
- this.userRating = ko.observable(rating || null);
- }
- function MyViewModel() {
- this.products = [
- new Product('Garlic bread'),
- new Product('Pain au chocolat'),
- new Product('Seagull spaghetti', 'like') // This one was already 'liked'
- ];
- }
- ko.applyBindings(new MyViewModel());
- ko.components.register('like-or-dislike', {
- viewModel: { require: 'files/component-like-widget' },
- template: { require: 'text!files/component-like-widget.html' }
- });
需要的文件:
files/component-like-widget.js 和files/component-like-widget.html 。你是不是发现,这比直接在组件的定义里面包含viewModel和template要整洁、方便很多。files/component-like-widget.js code:
- define(['knockout'], function(ko) {
- function LikeWidgetViewModel(params) {
- this.chosenValue = params.value;
- }
- LikeWidgetViewModel.prototype.like = function() {
- this.chosenValue('like');
- };
- LikeWidgetViewModel.prototype.dislike = function() {
- this.chosenValue('dislike');
- };
- return LikeWidgetViewModel;
- });
files/component-like-widget.html code:
- <div class="like-or-dislike" data-bind="visible: !chosenValue()">
- <button data-bind="click: like">Like it</button>
- <button data-bind="click: dislike">Dislike it</button>
- </div>
- <div class="result" data-bind="visible: chosenValue">
- You <strong data-bind="text: chosenValue"></strong> it.
- And this was loaded from an external file.
- </div>
现在like-or-dislike插件可以像上面的例子一样使用,使用component binding的方式,或者自定义元素的方式。
下面是源码:
view :
- <ul data-bind="foreach: products">
- <li class="product">
- <strong data-bind="text: name"></strong>
- <like-or-dislike params="value: userRating"></like-or-dislike>
- </li>
- </ul>
- <button data-bind="click: addProduct">Add a product</button>
viewModel:
- function Product(name, rating) {
- this.name = name;
- this.userRating = ko.observable(rating || null);
- }
- function MyViewModel() {
- this.products = ko.observableArray(); // Start empty
- }
- MyViewModel.prototype.addProduct = function() {
- var name = 'Product ' + (this.products().length + 1);
- this.products.push(new Product(name));
- };
- ko.applyBindings(new MyViewModel());
在你第一次点击“Add product” 按钮之前,打开浏览器的开发工具Network,你会发现组件的.js/.html文件第一次是按需加载的,加载之后就一直存在以备下次复用。
Knockoutjs源出处:http://knockoutjs.com/documentation/component-overview.html
Knockoutjs:Component and Custom Elements(翻译文章)的更多相关文章
- Web Components之Custom Elements
什么是Web Component? Web Components 包含了多种不同的技术.你可以把Web Components当做是用一系列的Web技术创建的.可重用的用户界面组件的统称.Web Com ...
- window 属性:自定义元素(custom elements)
概述 Web Components 标准非常重要的一个特性是,它使开发者能够将HTML页面的功能封装为 custom elements(自定义标签),而往常,开发者不得不写一大堆冗长.深层嵌套的标 ...
- HTML Custom Elements (v1)
HTML Custom Elements (v1) https://developers.google.com/web/fundamentals/web-components/customelemen ...
- [大牛翻译系列]Hadoop 翻译文章索引
原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 4.1 Joining Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.c ...
- Java 破解谷歌翻译api,可以实现程序自动化翻译文章
1 原理:查看谷歌翻译网站,输入需要翻译的文字,选择语言得到翻译后的文字,发送异步请求参数返回结果.java使用httpclient发送请求,实现使用代码翻译文章的功能. 2 下载代码后,测试入口 ...
- 自定义元素(custom elements)
记录下自定义html自定义元素的相关心得: 浏览器将自定义元素保留在 DOM 之中,但不会任何语义.除此之外,自定义元素与标准元素都一致 事实上,浏览器提供了一个HTMLUnknownElement, ...
- [HTML5] Render Hello World Text with Custom Elements
Custom elements are fun technology. In this video, you will learn how to set one up and running in l ...
- 使用custom elements和Shadow DOM自定义标签
具体的api我就不写 官网上面多 如果不知道这个的话也可以搜索一下 目前感觉这个还是相当好用的直接上码. <!DOCTYPE html> <html lang="en&q ...
- HTML Custom Elements & valid name
HTML Custom Elements & valid name valid custom element name https://html.spec.whatwg.org/multipa ...
随机推荐
- css,html性能优化
css性能优化 CSS是负责布局和渲染的重要角色,漂亮的页面当然能够吸引用户.本文是自己在开发过程中总结的关于CSS与性能的关系,可能有不对之处,希望能够指出. ? 1.所有的样式尽量放在css文件中 ...
- 蓝桥网试题 java 基础练习 特殊的数字
-------------------------------------------------------- 笑脸 :-) ------------------------------------ ...
- js实现省市区联动
先来看看效果图吧,嘻嘻~~~~~~~~~~~~~~~~~~~· 代码在下面: 示例一: html: <!DOCTYPE html> <html> <head> &l ...
- arcpy.mapping常用四大件-Layer
arcpy.mapping常用四大件-Layer by 李远祥 图层是地图里面非常重要的组成,几乎所有的制图显示都与图层有关.首先它是连接数据与符号渲染的重要桥梁,其次在出版地图中,图层又与图例关联在 ...
- UINavigationController实现全屏滑动返回功能
说明: UINavigationController默认在push出的控制器中都有边沿滑动返回功能,但是只能从屏幕左边滑才能返回,若从屏幕中间画并没有效果.下面实现全屏滑动功能. 探究: 系统默认能够 ...
- 利用matlab进行协方差运算
本文全部参考自: http://www.cnblogs.com/welen/articles/5535042.html#undefined 知识点一: MATLAB中四个取整函数具体使用方法如下:Ma ...
- Android注解学习(2)
最近考试周没什么时间写,回归正题.前面的一次简单的讲了关于注解的的基础部分,这一次分析xutils注解封装的源码(奉上github源码). 补充下:xUtils 2.x对Android 6.0兼容不是 ...
- dotnet new 命令使用模板
dotnet new 命令使用模板快速生成单页应用. 最新版.NET Core SDK RC4 最大改动是更新了 dotnet new 命令. dotnet new 默认不再创建控制台应用,而是展示帮 ...
- select中的文字垂直居中的问题
select文字在默认和边框高度增加时 是默认居中的.你要是不想居中的话可以用padding值调整.但是右侧的三角不会改变. select在高度减小时.字体是不会垂直居中的.无论你用什么他都不会垂直居 ...
- Zore copy(翻译《Efficient data transfer through zero copy》)
原文:https://www.ibm.com/developerworks/library/j-zerocopy/ <Efficient data transfer through zero c ...