UI源码:
rush:js;">
First instance,without parameters
Second instance,passing parameters
视图模型源码:
rush:js;">
ko.components.register('message-editor',{
viewmodel: function(p
arams) {
this.text = ko.observable(p
arams && p
arams.initialText || '');
},template: 'Message:
'
+ '(length:
)'
});
ko.applyBindings();
这只是一个非常简单的例子,在开发中,一般都是将View Model和Template写成单独外部文件,然后通过ko的components.register方法注册他们,在以后的KO高级应用系列中将会进一步讲解。
API
使用component绑定有两种绑定语法
1. 快速语法:
只传递一个字符串作为组件名称,比提供任何参数。例如:
如果你觉得这种写法有些死板的话,也可以传递一个监控属性,用其值作为组件名称。待以后组件名变化的时候,直接修改监控属性值即可:
2.完整语法:
提供完整的组件参数,参数如下:
name - 注入组件的名称。可使用字符串或是监控属性。
params - 一组参数对象。通常,这是一个包含多个参数的键值对。
例如:
备注1:仅模板式的component
通常的component绑定具有viewmodel和Template,但是这并不是必须的,有些时候一个component可能只包含一个Template。例如:
rush:js;">
ko.components.register('special-offer',{
template: '
Box" data-bind="text: productName">
'
});
可以使用注入的方式,将视图模型注入给Template:
在或者使用客户元素(以后的高级章节讲解)进行注入视图模型。
rush:js;">
如上例子,HTML标记为模板名称,其属性params中注入视图模型。
备注2:component虚拟绑定
如同之前章节的虚拟绑定一样,同样是使用和这种方式实现虚拟绑定,来达到不更改DOM元素的目的
rush:js;">
传参的例子:
rush:js;">
备注3:传递标记到component绑定
rush:js;">
arams: { items: someArrayOfPeople } }">
The person
is years old.
如上例子中,既有component绑定,也有一些DOM元素,当绑定后,my-special-list组件将会和这些DOM元素组成一个新的UI界面。在未来高级章节中,我们将会提到一个带有DOM标记的自定义companent绑定的例子。尽情期待。先卖个关子~。
内存管理(了解即可,切勿钻牛角尖)
您的视图模型类可能有一个dispose函数。如果得以运行,KO将调用这个函数在内存中删除组件,并从DOM中删除。
在一下情况,您必须使用dispose以释放垃圾收回资源。例如:
setInterval 回调后,需要明确清除。
使用clearInterval(handle)去清除他们,否则视图模型在内存常驻。
ko.computed 回调后,直到明确设置成从它们的依赖接收通知。
如果一个依赖关系是外部的对象,那么一定要使用.dispose()来释放计算监控属性,否则(也可能你的视图模型)将在内存常驻。另外,可以考虑使用一个pureComputed,以避免人工处理的需求。
Subscriptions 回掉后,需要明确清除。
如果您已经预订到外部观察时,一定要使用.dispose(),否则回调(也可能您的视图模型)将在内存中常驻。
例如:
rush:js;">
var someExternalObservable = ko.observable(123);
function SomeComponent
viewmodel() {
this.myCo
mputed = ko.co
mputed(function() {
return someExternalObservable() + 1;
},this);
this.myPureCo
mputed = ko.pureCo
mputed(function() {
return someExternalObservable() + 2;
},this);
this.mySubscription = someExternalObservable.subscribe(function(val) {
console.log('The external observable changed to ' + val);
},this);
this.myIntervalHandle = window.setInterval(function() {
console.log('Another second passed,and the component is still alive.');
},1000);
}
SomeComponent
viewmodel.prototype.
dispose = function() {
this.myCo
mputed.
dispose();
this.mySubscription.
dispose();
window.clearInterval(this.myIntervalHandle);
// this.myPureCo
mputed doesn't need to be manually
disposed.
}
ko.components.register('your-component-name',{
viewmodel: SomeComponent
viewmodel,template: 'some template'
});
以上所述是小编给大家介绍的KnockoutJS 3.X API 第四章之数据控制流component绑定。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。
原文地址:https://www.jb51.cc/js/45307.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。