ko绑定不适用于durandal

时间:2013-08-19 17:09:23

标签: knockout.js durandal

我知道怎么在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);
        }
    };
});

2 个答案:

答案 0 :(得分:3)

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

插件只是需要具有install方法的模块,这应该可以实现实际打开插件的逻辑。在这种情况下,install方法应该将处理程序添加到ko对象。

<强> Main.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

答案 1 :(得分:0)

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

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