34

私は最近Knockoutに慣れてきましたが、これは素晴らしいフレームワークだと思います。しかし、私には1つの懸念があります。

自明ではないバインディングの場合、JavaScriptコードのスニペットがビュー(マークアップ)に忍び寄っていることに気づきました。実際、Knockoutドキュメントのかなりの数のコードサンプルがこれも示しています。

これにより、ノックアウトは本質的に邪魔になりますか?

私はそれが何であるかを受け入れるだけで、実際には心配する必要はありませんか?

または、ノックアウトを目立たなくするために採用すべきパターン/テクニックはありますか?

4

5 に答える 5

21

素晴らしい質問です。私はしばらくの間複雑なKnockoutJSビューを作成してきましたが、RyanNiemeyerのクラスバインディングプロバイダーに切り替えるまで満足できませんでした。

Knockout ClassBindingProviderを使用すると、JavaScriptオブジェクトでバインディングを宣言し、data-classcssクラスの動作と同様の属性からバインディングを参照できます。それは素晴らしい働きをします!

TodoMVCアプリの例を参照してください。

于 2012-11-19T21:30:17.507 に答える
16

Javascriptをバインディングから除外し、メタデータにのみ使用するようにしてください

そうする代わりに

<span data-bind="visible: errors().length > 0">You have errors</span>

計算されたオブザーバブルを使用する

<span data-bind="visible: hasErrors">You have errors</span>

更新:先に進んで、KOの設定より規約を作成し ました。https://github.com/AndersMalmgren/Knockout.BindingConventions/wikiにあります。

する代わりに<button data-bind="click: save">Save</button>あなたはしている<button data-name="save">Save</button>。ライブラリは、慣例により、保存関数をボタンクリックハンドラーに接続することを理解します。慣例により、canSaveメンバーが存在する場合は、enableをバインドします。 http://jsfiddle.net/3Ajnj/15/

于 2012-11-19T10:06:36.127 に答える
5

私はそれが何であるかを受け入れるだけで、実際には心配する必要はありませんか?

私の理解では、「目立たない」とはいくつかの異なることを意味します。

「邪魔にならない」の1つの側面は、WebサイトがJavaScriptのサポートが制限されているか、まったくサポートされていないブラウザーでコア機能を維持する必要があることです。そのためには、この原則に対するあなたの懸念はあなたのターゲットオーディエンスに依存するべきです。私はターゲットオーディエンスを十分に理解しているプロジェクトに取り組んできたので、「このWebアプリを利用したい場合は、JavaScriptが有効になっているChromeなどの最新のブラウザーを使用してください」と言う余裕がありました。この場合、最新の最高のフロントエンドフレームワークを自由に使ってください。

私は他のプロジェクトに取り組んできましたが、Knockoutのようなフレームワークの使用には細心の注意を払う必要がありました。アプリケーションのコア機能を実行するためにKnockoutに大きく依存している場合、アプリケーションは本質的に邪魔になります。これが気になるかどうかは、ターゲットオーディエンスによって異なります。

「控えめなJS」のもう1つの原則は、JavaScriptとHTMLの間の関心の分離です。私は実際、この原則がどれほど厳密に重要であるかについて議論しています。より重要な原則は、MVVMパターンに従って、ビューモデルロジック表示ロジックの間の関心の分離であると思います。Knockoutは、データバインディングにJavaScriptロジックを少し入れたとしても、view/vmの懸念を明確に分離することを促進する素晴らしい仕事をします。厳密にビューロジックである限り、実際にはビューに属していると思います。

于 2014-03-19T18:26:36.140 に答える
4

まだ読んでいない場合は、Ryanのブログにアクセスして、「KnockoutJSでのビューの簡素化とクリーンアップ」を読むことをお勧めします...

http://www.knockmeout.net/2011/08/simplifying-and-cleaning-up-views-in.html

コードをリファクタリングするためのいくつかの優れた方法を説明しているので、HTMLが乱雑にならず、よりクリーンに保たれます。

于 2013-08-25T20:12:27.730 に答える
1

選択した回答で提案されているバインディングプロバイダーの代わりに、knockout.unobtrusiveBindingProviderがあります。これは、「HTMLとKnockoutデータバインディングのクリーンな分離を可能にするKnockoutJS用の目立たないコンベンションベースのバインディングプロバイダー」です。

于 2016-08-08T09:00:00.410 に答える