我将为 Web 应用程序使用 knockout.js 或 angular.js 库(绑定支持的 b/c)。
我的问题是 - 您将这些库集成到现有 UI 库(如 Dojo、jQueryUI、Ext.js、YUI 等)中的经验如何。例如,数据绑定支持/语法在 UI 库中的使用情况如何?您是否必须实现诸如自定义绑定之类的东西才能使用小部件表单 UI 库?
我将为 Web 应用程序使用 knockout.js 或 angular.js 库(绑定支持的 b/c)。
我的问题是 - 您将这些库集成到现有 UI 库(如 Dojo、jQueryUI、Ext.js、YUI 等)中的经验如何。例如,数据绑定支持/语法在 UI 库中的使用情况如何?您是否必须实现诸如自定义绑定之类的东西才能使用小部件表单 UI 库?
对于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 指令中的自定义绑定不同,它更适合编写自己的小部件,而不适合与现有小部件集成。
总结一下:
通常,您会实现自定义绑定以与外部库一起使用,但通常有大量的开源工作已经取得了相当大的进展。查看
https://github.com/SteveSanderson/knockout/wiki/Bindings
如果没有可用的,实现你自己的并不是非常复杂: