0

バックボーンモデルを一連のフィールドにリンクするためBackbone.jsに一緒に使用することは可能ですか?もしそうなら、どのように?jquery.datalink.js

たとえば、次のようになります。

<div id="person">
  <label for="name">Name:</label>
  <input type="text" name="name" id="name" />
</id>

var m = Backbone.Model.extend({});

次のことができるのは理にかなっているようです(ただし、機能しません)。

$("#person").link(m);

「機能しない」とは、モデルを変更しても、リンクが入力フィールドを更新しないことを意味します。入力フィールドを変更しても、モデルが更新されません。

私はjsFiddleでこれをいじくり回してきましたが、役に立ちませんでした。実際、データリンクプラグインは実際には文書化されているようには機能しないようです(エラーが発生した場合を除く)。

データリンクがこれに適していない場合は、代替案の提案をいただければ幸いです。

考えやフィードバックをいただければ幸いです。

4

2 に答える 2

1

私はDatalinkプラグインを使用していませんが、これは役立つかもしれません...

model.attributesこの種のカプセル化の原則に違反しますが、Backboneモデル内でオブジェクトを使用できます。

だから多分このようなもの:

$("#person").link(m.attributes);

また、Backbone.Modelをインスタンス化すると、次のようになります。

var m = new Backbone.Model();

呼び出すときBackbone.Model.extendは、オブジェクトインスタンスではなく、実際に新しいコンストラクター(新しいクラスなど)を作成します。

于 2011-05-02T20:58:44.813 に答える
1

@Samが提供するソリューションは機能することが期待されていますが、注意が必要な関連する問題があります。バックボーンモデルは観察可能です。関数をバインドして、モデルのイベントを変更できます。これらのイベントは、Backboneが提供するラッパーゲッターおよびセッター関数によってトリガーされます。model.attributesを直接使用して、これらのゲッターとセッターをバイパスすると、データが変更されたときにイベントがトリガーされません。したがって、データリンクの関連付けが単方向である場合、これは問題ではありません。javascriptオブジェクトが変更されると、ビューが変更されますが、双方向のデータリンクを実装する場合、ビューがユーザーによって操作されると、モデル属性は変更されますが、対応するセッターは変更されるため、問題が発生します。使用されないため、残りのアプリケーションコードには変更が通知されません。これにより、デバッグが困難になる可能性があります。データバインディングが主な関心事である場合は、最先端のデータリンク機能を備えたKnockoutJSを調べてください。

于 2011-06-18T08:29:43.563 に答える