9

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

我的问题是 - 您将这些库集成到现有 UI 库(如 Dojo、jQueryUI、Ext.js、YUI 等)中的经验如何。例如,数据绑定支持/语法在 UI 库中的使用情况如何?您是否必须实现诸如自定义绑定之类的东西才能使用小部件表单 UI 库?

4

2 回答 2

15

对于Knockout,情况相当不错。可以通过自定义绑定与第三方小部件集成。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方法就足够了。甚至还有一组现成的jQuery UI绑定。它没有涵盖所有 jQuery UI 小部件,但由于创建自定义绑定非常简单,您可以根据需要实现自己的绑定。

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

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

总结一下:

  • 淘汰赛绑定更容易。与第三方小部件集成很容易。
  • Angular 指令更适合编写自己的小部件,但同时也更强大。
于 2012-06-18T12:59:03.773 回答
2

通常,您会实现自定义绑定以与外部库一起使用,但通常有大量的开源工作已经取得了相当大的进展。查看

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

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

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

于 2012-06-18T12:58:18.650 回答