0

我知道如何在 KO 中编写服装绑定。但是,当您使用 durandal 时,我将代码放在哪里?我使用了视图附加和激活,但我都没有得到任何爱。

这是下面的代码

//knockout-handlers.js
define(function (require) {
    ko.bindingHandlers.slideVisible = {
        init: function (element, valueAccessor) {
            var value = ko.utils.unwrapObservable(valueAccessor());
            $(element).toggle(value);
        },
        update: function (element, valueAccessor, allBindingsAccessor) {
            var value = valueAccessor(), allBindings = allBindingsAccessor();
            var valueUnwrapped = ko.utils.unwrapObservable(value);
            var duration = allBindings.slideDuration || 400;

            if (valueUnwrapped == true)
                $(element).slideDown(duration);
            else
                $(element).slideUp(duration);
        }
    };

    ko.bindingHandlers.fadeVisible = {
        init: function (element, valueAccessor) {
            var value = ko.utils.unwrapObservable(valueAccessor());
            $(element).toggle(value);
        },
        update: function (element, valueAccessor, allBindingsAccessor) {
            var value = valueAccessor(), allBindings = allBindingsAccessor();
            var valueUnwrapped = ko.utils.unwrapObservable(value);
            var duration = allBindings.fadeDuration || 400;

            if (valueUnwrapped == true)
                $(element).fadeIn(duration);
            else
                $(element).fadeOut(duration);
        }
    };
});
4

2 回答 2

3

我将我所有的 Knockout 扩展(如客户绑定处理程序和扩展程序)编写为一个插件,我将其加载到main.js.

插件只是带有install方法的 Require 模块,它应该包含实际打开插件的逻辑。在这种情况下,该install方法应将处理程序添加到ko对象。

主.js

app.configurePlugins({

    //Durandal plugins
    router:true,
    dialog: true,

    //My plugins
    knockoutExtensions: true
});

我的插件

define(['knockout'], function(ko) {

    var install = function() {
        //You know, do stuff
    };  

    return {
        install: install
    };
});

此方法仅适用于 Durandal 2.0。早期版本有不同的插件 API

于 2013-08-19T21:08:17.690 回答
0

如果我理解您的问题,您将无法使用 durandal 激活自定义绑定。在渲染视图之前将其添加到任何位置。我为每个处理程序创建了模块,然后在 main.js 中需要它。

我有一个类似的问题。来源:https ://groups.google.com/forum/#!topic/durandaljs/NIBVLKN6v1Y

于 2013-08-19T20:07:33.707 回答