Knockoutjs-关于components

components可以作为widgets来呈现,它包含了自己独立的view,能够被预加载或者通过异步的方式加载,能够接受参数并返回结果,可继承于其他组件,也可被重用。

通过使用components,我们可以使用自定义的语义化标签来代替<div>,这种方式在旧的浏览器下同样可以实现兼容。

一个组件中包含了viewmodel和template,所以在使用的时候需要像这样的方式来注册组件:

1 ko.components.register( ‘component-name‘ , {
2     viewModel : something… ,
3     template : something…
4 });

  其中,组件名称使用小写的单词,并以短线连接的形式,这样就可应被当作元素来使用;

  viewModel是可选的,如果没有的话,这个组件也就等同于一段HTML代码;

  template是必不可少的。

  • viewmodel的构建可以有多种方式

1 构造函数的方式

在此方式下,会为每个组件分别创建实例,也就是每个都有单独的viewmodel对象。

2 共享对象实例的方式

如果想要使多个组件共享同一个viewmodel的实例,可以使用如下的方式:

1  var shareViewModelInstance = {...};
2  ko.components.register( ‘my-component‘ , {
3      viewModel : { instance : shareViewModelInstance },
4      template : ...
5  });

3 工厂函数模式

在绑定到viewmodel之前,对所关联的元素进行某些操作

1 ko.components.register(‘ my-component‘ , {
2     viewModel: {
3         createViewModel: function(params, componentInfo){
4             return new MyViewModel( params );
5         }
6     },
7     template: ...
8 });        

4 文件加载模式

类似使用require.js 文件

1 ko.components.register(
2     viewModel: { require: ‘some/module/name‘ },
3     template: ...
4 )

在加载进来的文件中可以使用以上任意的模式

格式:

1 define( [‘knockout‘], function(ko){
2       function MyViewModel(){
3                ...
4       }
5       return MyViewModel;
6       // return { instance: new MyViewModel()};
7       //...
8 });
  • template的构建方式

1 使用ID来调用模板

1 <template id=‘component-template‘>
2      <h1>...</h1>
3 </template>
1 ko.components.register(‘my-component‘,{
2      template: {element: ‘component-template‘},
3      viewModel: ...
4 });

  其中<template>元素会被浏览器忽略,<template>内部的元素才会被当作是模板的一部分。

2 使用 var elementInstance = document.getElementById(‘component-template‘) 获取template

3 使用标签组成的字符串 template : ‘<h1 data-bind="text: title"></h1>‘

4 使用DOM节点的数组创建

5 外部引入文件

     template:{ require: ‘/some/template‘}
     template:{ require: ‘text!path/file.html‘}
  • 设定component的同步或异步加载方式

     synchronous: true

    默认为false,异步加载

时间: 2024-11-03 21:16:09

Knockoutjs-关于components的相关文章

Knockoutjs:Component and Custom Elements(翻译文章)

Knockoutjs 的Components 是一种自定义的组件,它以一种强大.简介的方式将你自己的ui代码组织成一种单独的.可重用的模块,自定义的组件(Component)有以下特点: 1.可以替代单独的widgit或者控制逻辑,或者你自己application的整个模块: 2.包含自己的view,通常也包含了自己的viewModel(这个viewModel也可以不进行定义) 3.可以预加载,可以通过AMD或者其他模块系统的方式根据需要异步加载 4.可以接收参数,根据需要选择性的对这些参数进行

knockoutjs如何动态加载外部的file作为component中的template数据源

玩过knockoutjs的都知道,有一个强大的功能叫做component,而这个component有个牛逼的地方就是拥有自己的viewmodel和template, 比如下面这样: ko.components.register('message-editor', { viewModel: function(){}, template:"" }); 很显然,viewmodel就是function函数区,而template就是模板区,然后通过register函数将component注册到k

深入浅出KnockoutJS

深入浅出KnockoutJS 写在前面,本文资料大多来源网上,属于自己的学习笔记整理. 其中主要内容来自learn.knockoutjs.com,源码解析部分资料来自司徒正美博文<knockout.js学习笔记>系列. 1. Knockout初体验 1.1 Before Knockout 假设我们的页面输入区域有一个div用来展示一件物品的名字,同时有一个输入框用来编辑这件物品的名字 <div id=”itemName”></div> <input type=”t

Knockoutjs Component问题汇总

在使用KnockoutJs Component组件时,遇到的坑,让人晕头转向奶奶的,什么问题写的都没错啊! 1.Component绑定时,params:的参数应绑定属性引用不能绑定属性的值. 1)主页面.Component页面代码 1 <h1>主页面</h1> 2 <span>名称:</span><span data-bind="text:Name"></span><br /> 3 <span&g

Magento2 UI components概述

来源:宝鸡SEO UI components 概述Magento UI components 是用来展示不同的UI元素,比如表,按钮,对话框等.他们被用于简单灵活的交互界面渲染.Components被用来渲染结果界面,提供进一步的与javascript组件和服务器的交互.Magento UI components被实现为一个标准的模块叫Magento_UI.想要在你的模块里面使用UI Components,你需要在你的composer.json文件里面添加对Magento_UI的依赖.以下XSD

App 组件化/模块化之路——Android 框架组件(Android Architecture Components)使用指南

面对越来越复杂的 App 需求,Google 官方发布了Android 框架组件库(Android Architecture Components ).为开发者更好的开发 App 提供了非常好的样本.这个框架里的组件是配合 Android 组件生命周期的,所以它能够很好的规避组件生命周期管理的问题.今天我们就来看看这个库的使用. 通用的框架准则 官方建议在架构 App 的时候遵循以下两个准则: 关注分离 其中早期开发 App 最常见的做法是在 Activity 或者 Fragment 中写了大量

Android Studio中的App Components重要点记述

阅读英文文档而理解的file:///E:/Android2016/sdk/docs/guide/components/fundamentals.html#Components App Compnents 每个component都是系统可以进入你的app的一种方式,但是不是所有的component都是对于user而言的真实的entry points. 共有四种app components: Activity: 每一个activity代表用户界面的一个单独的屏幕,这些activity是相互独立的 S

Building Maintainable Software-java篇之Keep Architecture Components Balanced

Building encapsulation boundaries is a crucial skill in software architecture. -George H. Fairbanks in Just Enough Architecture Guideline: ? Balance the number and relative size of top-level components in your code. ? Do this by organizing source cod

PyQt5 Introduction and components

在开始写代码以前,对PyQt5整体大致了解一下还是有必要的.这方面的东西看看PyQt5官方给出的文档就好,下面就是我从文中截取的部分内容: Introduction PyQt5 is a set of Python bindings for v5 of the Qt application framework from The Qt Company. Qt is a set of C++ libraries and development tools that includes platform

KnockOutJs初次体验

最近忙着一个项目的上线,突然想起好久没上博客园了 跑进来看了一下,好像已经过了有四个月了 想想也是过了蛮久了,所以进来发表一点什么东西 偶然机会看了一个叫KnockOutJs的东西,体验了一下,觉得还是蛮好玩的 首先引用官方的knockoutjs,然后写上js代码 var ViewModel = function(first, middle,last) { this.firstName = ko.observable(first); this.middleName=ko.observable(m