2

假设我有一个充满定义的大型 JS 文件,例如:

$(document).on('focusin', '.field', function () {
    // some logic
}).on('focusout', '.field', function () {
    // some logic
});

在选择器引用 的地方#element,我可以轻松地将其重构为淘汰视图模型 - 我只需data-bind为元素上的操作添加一个属性,并将逻辑移动到视图模型中。
但是在那些“CSS 绑定事件”的接线情况下,我看不出它是如何完成的......

这里的常见/推荐做法是什么?我应该把它放在我闪亮的淘汰码旁边吗?

4

3 回答 3

1

You can use a custom binding provider to use Knockout bindings without having to define data-bind attributes. Here are some examples and further info:

于 2013-01-18T00:51:49.270 回答
0

我做类似创建自定义绑定的事情。

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');
    }
};
于 2013-01-17T14:40:34.850 回答
0

我认为你所拥有的很好,也许你的问题更多是关于如何组织你的代码。如果是这样,我建议您查看tekpub 中的此代码示例,并了解 Rob Conery 如何构建他的应用程序。

本质上,他使用命名空间来封装与淘汰相关的代码,并使用相同的模式来封装事件的连接。

我要查看的文件是 application.js、order_editor.js 和他实例化他的东西的这个 html 文件。

您还可以通过使用诸如requirejs之类的东西来根据需要加载内容来获得更高级的体验。

于 2013-01-17T16:41:52.067 回答