Javascript knockout.js可以绑定到CSS类吗?
假设我有一个很大的JS文件,其中包含如下定义:Javascript knockout.js可以绑定到CSS类吗?,javascript,css,knockout.js,refactoring,Javascript,Css,Knockout.js,Refactoring,假设我有一个很大的JS文件,其中包含如下定义: $(document).on('focusin', '.field', function () { // some logic }).on('focusout', '.field', function () { // some logic }); 在选择器引用#元素的地方,我可以很容易地将其重构为一个淘汰视图模型-我只需为元素上的操作添加一个数据绑定属性,并将逻辑移到视图模型中。 但在那些“CSS绑定事件”的连接情况下,我看不出如
$(document).on('focusin', '.field', function () {
// some logic
}).on('focusout', '.field', function () {
// some logic
});
在选择器引用#元素
的地方,我可以很容易地将其重构为一个淘汰视图模型-我只需为元素上的操作添加一个数据绑定
属性,并将逻辑移到视图模型中。但在那些“CSS绑定事件”的连接情况下,我看不出如何做到
这里的常见/推荐做法是什么?我应该把它放在我闪亮的淘汰代码旁边吗?我会创建自定义绑定 请关注下面的示例:
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');
}
};
我认为你所拥有的一切都很好,也许你的问题更多的是关于如何组织你的代码。如果是这样的话,我建议你看看这个,看看Rob Conry是如何构建他的应用程序的 本质上,他使用名称空间来封装与敲除相关的代码,并使用相同的模式来封装事件的连接 我要查看的文件是application.js、order_editor.js,以及他在哪里实例化他的东西
您还可以通过使用类似的东西来加载所需的内容,从而变得更加有趣。您可以使用自定义绑定提供程序来使用淘汰绑定,而无需定义
数据绑定
属性。以下是一些示例和更多信息: