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

Data binding angular.js(或knockout.js)与其他UI库的集成?,data-binding,knockout.js,angularjs,Data Binding,Knockout.js,Angularjs,我将对web应用程序使用knockout.js或angular.js libs(绑定支持的b/c) 我的问题是-您如何将这些库集成到现有的UI库(如Dojo、jQueryUI、Ext.js、YUI等)中,。。 例如,UI库中数据绑定支持/语法的使用情况如何?为了使用小部件表单UI库,您是否必须实现自定义绑定之类的功能?通常,您需要实现自定义绑定来处理外部库,但通常有大量开源工作已经取得了相当大的进展。退房 如果没有可用的,那么实现您自己的并不十分复杂: 对于淘汰赛情况相当不错。可以通过与第三方

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

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

通常,您需要实现自定义绑定来处理外部库,但通常有大量开源工作已经取得了相当大的进展。退房

如果没有可用的,那么实现您自己的并不十分复杂:


对于淘汰赛情况相当不错。可以通过与第三方小部件集成。bindingsapi非常简单,而且非常简单。您只需实现一个或两个方法(引用淘汰文档):

大多数情况下,实现单个
update
方法就足够了。甚至还有。它并没有涵盖所有jQueryUI小部件,但由于创建自定义绑定非常简单,您可以根据需要实现自己的绑定

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

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

总结如下:

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

还要注意的是,Angular的网站目前处于不断变化之中,因此讨论中的许多链接都被破坏了。我真的很想给你一个更具体的角度集成示例,比如jQuery、ExtJS或其他库,但我找不到任何东西:(angularjs的一个分支组,称为AngularUI(我是其中的一员)正在创建angular小部件,包装jqueryui和twitter引导插件。这还处于早期阶段,我们确实需要升级到新发布的angularjs 1.0。使用angular指令确实更加复杂。angular的优势很多。对于大多数人来说,最大的障碍是通知angular该模型已更改,因此可以反映在视图中。@DanDoyon Angular ui库确实很有用,但在很多方面也很不足。要回答OP的问题,将Angular集成到现有应用程序中是不可能的。集成Knockout是。Angular是全有或全无,Knockout不是。@PWKad,已经有一段时间了,我发表了评论。从那时起,谷歌开始与angular ui进行协调,并提出了angular本机代码替换来引导。关于“全部”或“无”的评论,我不能说是“击倒”,但可以使用angular只针对DOM页面的一部分。我在ASP.NET上使用过这种技术,它很好地工作了。biangular最重要的一点是,在与其他库集成时,由于双向绑定,您需要执行scope.apply来通知angular运行其摘要周期以处理更改。
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.
    }
};