angular.js(或knockout.js)与其他UI库的集成?

时间:2012-06-18 12:53:18

标签: data-binding knockout.js angularjs

我将使用knockout.js或angular.js libs(绑定支持的b / c)用于Web应用程序。

我的问题是 - 您如何将这些库集成到现有的UI库中,如Dojo,jQueryUI,Ext.js,YUI,.. 例如。如何在UI库中使用数据绑定支持/语法?您是否必须实现类似自定义绑定的操作才能使用窗体小部件UI?

2 个答案:

答案 0 :(得分:15)

对于淘汰赛,情况非常好。可以通过custom bindings与第三方小部件集成。 Bindings API非常简单且前瞻性。您只需要实现一个或两个方法(引用Knockout文档):

ko.bindingHandlers.yourBindingName = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
        // This will be called when the binding is first applied to an element
        // Set up any initial state, event handlers, etc. here
    },
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
        // This will be called once when the binding is first applied to an element,
        // and again whenever the associated observable changes value.
        // Update the DOM element based on the supplied values here.
    }
};

大多数时候实现单update方法就足够了。甚至有a collection of ready-made bindings for jQuery UI。它没有涵盖所有jQuery UI小部件,但由于创建自定义绑定非常简单,您可以根据需要实现自己的绑定。

对于 Angular JS ,情况更加困难。您可以创建自定义绑定作为您自己的Directive的一部分。 Directives API要求您编写更多代码。指令的生命周期也非常复杂。所以,他们需要花费相当多的时间来学习。

同时,它允许您指定行为的许多不同方面。例如,您可以通过directive完全重写窗口小部件的内部HTML表示,并在其中使用Angular模板。在Knockout中你需要使用jQuery。不幸的是,与Knockout指令中的自定义绑定不同,它更适合编写自己的小部件而不是与现有小部件集成。

总结:

  • Knockout绑定更容易。与第三方小部件集成非常简单。
  • Angular指令更适合编写自己的小部件,但同时功能更强大。

答案 1 :(得分:2)

通常,您将实现自定义绑定以使用外部库,但通常有许多开源工作已经取得了相当大的进展。看看

https://github.com/SteveSanderson/knockout/wiki/Bindings

如果没有可用的,那么实现你自己的并不是非常复杂:

http://knockoutjs.com/documentation/custom-bindings.html