9

Web アプリには、knockout.js または angular.js ライブラリ (バインディング サポートの b/c) を使用します。

私の質問は、これらのライブラリを Dojo、jQueryUI、Ext.js、YUI などの既存の UI ライブラリに統合した経験はどうですか?たとえば、UI ライブラリでのデータバインディングのサポート/構文の使用はどうですか? ウィジェット フォーム UI ライブラリを使用するには、カスタム バインディングのようなものを実装する必要がありますか?

4

2 に答える 2

15

ノックアウトの場合、状況は非常に良好です。カスタムバインディングを介してサードパーティのウィジェットと統合できます。Bindings APIは非常にシンプルで、単純明快です。必要なのは、1つまたは2つのメソッドを実装することです(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だけで十分です。jQueryUI用の既製のバインディングのコレクションもあります。すべてのjQueryUIウィジェットを網羅しているわけではありませんが、カスタムバインディングの作成は非常に簡単なので、必要に応じて独自のバインディングを実装できます。

Angular JSに関しては、状況はより困難です。独自のディレクティブの一部としてカスタムバインディングを作成できます。Directives APIでは、さらに多くのコードを記述する必要があります。ディレクティブのライフサイクルも非常に複雑です。ですから、彼らは学ぶのにかなりの時間がかかるでしょう。

同時に、動作のさまざまな側面を指定できます。たとえば、ウィジェットの内部HTML表現を完全に書き直して、内部でdirectiveAngularテンプレートを使用できます。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 に答える