可以将knockout.js绑定到CSS类
Can knockout.js bind to CSS classes?
假设我有一个大的JS文件,其中包含如下定义:
$(document).on('focusin', '.field', function () {
// some logic
}).on('focusout', '.field', function () {
// some logic
});
在选择器引用#element
的地方,我可以很容易地将其重构为一个knockout viewModel—我只需为元素的动作添加一个data-bind
属性,并将逻辑移动到viewModel中。
但是在那些"CSS绑定事件"的连接情况下,我不知道如何做到....
这里常见/推荐的做法是什么?我应该把这个放在我闪亮的密码旁边吗?
您可以使用自定义绑定提供程序来使用Knockout绑定,而不必定义data-bind
属性。以下是一些示例和进一步信息:
- http://www.knockmeout.net/2011/09/ko-13-preview-part-2-custom-binding.html
- http://jsfiddle.net/StevenSanderson/n7h2A/1/
- 不引人注目的淘汰赛
- https://github.com/rniemeyer/knockout-classBindingProvider
- https://github.com/AndersMalmgren/Knockout.BindingConventions/wiki
我做的就是创建自定义绑定。
http://knockoutjs.com/documentation/custom-bindings.html看下面的例子:
ko.bindingHandlers.hasFocus = {
init: function(element, valueAccessor) {
if(element.hasClass('yourClass') {
var value = valueAccessor();
value(true);
}
},
update: function(element, valueAccessor) {
var value = valueAccessor();
if (ko.utils.unwrapObservable(value))
element.attr('class', 'somethingElse');
else
element.toggleClass('somethingToToggle');
}
};
我认为你所拥有的很好,也许你的问题更多的是关于如何组织你的代码。如果是这样,我建议你看看tekpub的代码示例,看看Rob Conery是如何构建他的应用程序的。
本质上,他使用名称空间封装淘汰相关的代码,并使用相同的模式封装事件的连接。
我要查看的文件是application.js, order_editor.js,以及这个他实例化他的东西的html文件。
你也可以使用一些像requires这样的东西来加载你需要的东西。
相关文章:
- css绑定中的自定义类名
- Knockout.js在标头中绑定css/js库
- 将列表的css列计数属性相应地绑定到引导网格类
- 使用敲除绑定到css类
- 如何通过 KNOCKOUT 中的数据绑定值更改 css 中规则的值
- 在foreach中敲除动态css绑定
- 绑定到特定的 CSS 过渡
- 通过CSS绑定、敲除.js组合动态和静态类
- 敲除类的动态表达式值 - CSS 绑定
- 敲除.js布尔虚拟元素与 CSS 绑定性能
- 绑定数据列表后,将 css 样式重新应用于视图的一部分
- AngularJS通过ng-click绑定CSS值.值位于控制器中的对象中
- Knockout中的CSS绑定,用于绑定两个类,其中一个是动态的,另一个是静态的并经过评估的
- 如何在具有现有点击绑定的表头上切换css类
- 可见绑定和动态css绑定
- Javascript中的knockout css绑定
- 带下拉值的CSS绑定
- 当css绑定更新时,Textarea失去值
- Durandal和Knockout:将css绑定到body元素
- asp.net MVC - 敲除 CSS 绑定和揭示模块 JavaScript Patten