ko(knockoutjs)动态属性绑定
knockoutjs 简称 koko的动态属性是指,ViewModel不确定的属性,而后期却需要的属性。什么是不确定属性,比如ListModel如果 编辑某一项,想把这一项的状态变更为Edit。数据并不包括Edit属性,mvvm绑定时,会发现报错。那么一定需要拓展ko才能达到我们的目的。
首先来认识有值属性绑定,和 无值属性绑定:
一、有值属性绑定:JS模型:
1 $(function () { 2 var viewModel = function () { 3 var self = this; 4 5 self.text = ko.observable(1); 6 }; 7 ko.applyBindings(new viewModel()); 8 });
<div data-bind='text:text'></div>
二、无值属性绑定: JS模型:
当然text是一般值类型,用法 和 有值属性绑定一样,如果非值类型,而属性是一个对象,而需要使用with:UI绑定:
三、动态属性绑定:动态属性绑定,那么这个属性本身不确定,沿用ko的方法是很难去实现,所以 需要进行拓展。JS拓展:
JS模型:
UI绑定:
ext中,第一个text是ko text方法,第二个text必须是字符串,是context/viewModel的属性。所以ext的动态属性,可以使用于任何ko方法,比如ext:{text:'text', value:'text'}呈现:
1 $(function () { 2 var viewModel = function () { 3 var self = this; 4 5 self.text = ko.observable(); 6 }; 7 ko.applyBindings(new viewModel()); 8 });
1 <div data-bind='with:text'> 2 <div data-bind="text:property"></div> 3 </div>
1 //雾里看花 Q:397386036 2 ko.bindingHandlers.ext = { 3 update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 4 var value = ko.utils.unwrapObservable(valueAccessor()); 5 for (var handler in value) { 6 if (value.hasOwnProperty(handler)) { 7 if (typeof viewModel[value[handler]] == 'undefined') { 8 viewModel[value[handler]] = ko.observable(); 9 } 10 11 ko.bindingHandlers[handler].update(element, function () { return viewModel[value[handler]]; }); 12 } 13 } 14 } 15 };
1 $(function () { 2 var viewModel = function () { 3 }; 4 ko.applyBindings(new viewModel()); 5 });
1 <div data-bind="ext:{text: 'text'}"></div> 2 <!--事件 便于 测试--> 3 <a href="javascript:void(0)" data-bind="click:function(){$data.text(1);}">更改text值</a>
转自:博客园 雾里kanhua 《ko(knockoutjs)动态属性绑定》
url:http://www.cnblogs.com/g_397386036/archive/2012/11/13/2768990.html
url:http://www.cnblogs.com/g_397386036/archive/2012/11/13/2768990.html
相关推荐
总结来说,动态属性绑定技巧在Knockout.js中的应用,主要涉及扩展knockout的核心功能,以便根据运行时的需求动态地添加和绑定属性。这一技巧对于构建高度动态和可扩展的Web应用程序至关重要,能够帮助开发者更好地...
**KnockoutJS**,简称KO.js,是一个轻量级的JavaScript库,专注于MVVM(Model-View-ViewModel)设计模式,使得在Web开发中实现数据绑定和动态用户界面变得简单易行。它通过双向数据绑定特性,允许开发者在视图和模型...
例如,`ko.computed`函数可以创建一个计算属性,当其依赖的属性变化时,计算属性的值也会自动更新。 ### 6. 嵌套视图模型与组件化 KnockoutJS支持嵌套的视图模型,这意味着可以将复杂的UI分解为多个独立的、可复用...
为了使用 KnockoutJS 的 foreach 绑定,首先需要通过 <script> 标签引入 KnockoutJS 的库,然后使用 ko.applyBindings 函数来将 KnockoutJS 的绑定应用于页面的特定部分。 总的来说,KnockoutJS 的 foreach 绑定...
这里,`ko.mapping.fromJSON`是KnockoutJS提供的映射函数,用于将JSON对象转换为可观察的对象,`ko.applyBindings`则是将视图模型绑定到DOM元素。 通过结合Asp.Net MVC 4和KnockoutJS,开发者可以创建出具有复杂...
在HTML中,我们可以使用 `data-bind` 属性来绑定这些 observable 到相应的控件: ```html , value: selectedProvince"> ().cities, visible: selectedProvince, value: selectedCity"> ().districts, visible: ...
KO绑定 bindingHandlers通常对于使用SharePoint很有用 有关概述,请参见的“部分。 我已经收集了其中一些绑定处理程序并构建了其他绑定处理程序。 在可能的情况下,我相信每个文件中的来源。 不幸的是,在使用...
总之,KnockoutJS的if绑定和ifnot绑定是数据控制流中非常重要的工具,它们提供了强大的条件渲染功能,使得开发者能够构建出响应数据变化的动态用户界面。通过结合foreach绑定和其他KnockoutJS的特性,开发者可以创建...
总结来说,KnockoutJS的Component功能提供了构建复杂UI的强大工具,通过动态加载外部文件作为模板,可以实现更灵活的组件复用和管理。通过结合ViewModel和动态数据绑定,可以轻松创建响应式的用户界面。通过参数传递...
GopherJS-Ko GopherJS绑定到KnockoutJS安装go get github.com/mibitzi/gopherjs-ko 文献资料有关文档,请参见
KnockoutJS是一个轻量级的MVVM(Model-View-ViewModel)JavaScript库,它使得在浏览器端处理动态数据变得简单易行。在网页应用中,分页功能是常见的需求,用于处理大量数据的显示,提高用户体验。本文将深入探讨如何...
这个教程是针对中文用户设计的,旨在帮助初学者和有经验的开发者快速掌握如何使用KnockoutJS来创建动态的、数据绑定的用户界面。 **1. 数据绑定** KnockoutJS的核心特性之一是数据绑定。它允许开发者将JavaScript...
以下是一个简单的使用示例,定义了四个KnockoutJS绑定区域:app1、app2、app3和app4。通过创建ViewModel,我们可以初始化store,并在其中定义`list`和`name`等观察属性。`vf`对象包含了添加类的`add`方法,该方法...
在KnockoutJS框架中,click绑定是用来响应DOM元素点击事件的一种机制,它允许开发者在用户与界面交互时执行JavaScript函数。KnockoutJS是一个轻量级的JavaScript库,用于构建可扩展的富数据应用程序。本文将详细介绍...
- knockout.bootstraptable.js,这是一个自定义的KnockoutJS绑定处理插件 - Department.js,这是用户自定义的JavaScript文件,用于具体实现数据模型和业务逻辑 2. 在KnockoutJS中定义了自定义绑定handler:...
KnockoutJS是一个轻量级的MVVM(Model-View-ViewModel)库,它使得数据绑定和DOM操作变得更加简单。在KnockoutJS 3.X版本中,事件绑定...在实际开发中,熟练掌握事件绑定能帮助你更高效地构建动态和响应式的前端界面。
然后,通过KnockoutJS的`data-bind`特性,将这些ViewModel属性和方法绑定到HTML元素上,使得它们能够在页面上实时反映出来。 除此之外,KnockoutJS还提供了如模板、计算属性等功能,这些可以帮助我们处理更复杂的...
textInput绑定目的 textInput绑定主要用于<input>或者<textarea>元素。他提供了DOM和viewmodel的双向更新。不同于value绑定,textinput绑定是实时更新的。...pre data-bind="text: ko.toJSON($r