バックボーンとjQueryを使用して、プロトタイピングアプリ用のモックアップアプリケーションを作成しようとしています. この時点でかなり最小限です。 http://jsfiddle.net/IgnorantUser/u7JkX/
私は2つのモデルCanvas
とButtonWidget
. また、3 つのビューがあります。CanvasView
キャンバス用の 、 のButtonInCanvas
ビュー、およびButtonWidget モデルによってサポートされていないButtonWidget
ダミー ビューが呼び出されます。代わりに、.button css クラスからデフォルト値を取得し、キャンバスへのドラッグ アンド ドロップに使用されます。 ButtonInToolbar
、ボタンを配置します。
他のウィジェット (ラベル、テキスト ボックス、イメージ ホルダーなど) があるので、次のコードを使用して、「ButtonInToolbar」ビューのコンテキストで「CanvasView」によってトリガーされるドロップ イベント処理を渡すというアプローチを取りました。
passDrop: function (e, ui){
if ($(ui.draggable).parent().is('#toolbar')){
ui.draggable.trigger('drop'); //sets the drop in the context of the dragged view (ButtonInToolbar)
}
私が直面している問題は、ui.position.left
とのui.position.top
値をButtonInToolbar
ビューに渡すことができるようにしたいということです。これにより、dropHandler メソッドを呼び出して新しいButtonInCanvas
ビューを追加するときに、ドロップの位置を渡し、ボタンを実際の場所にレンダリングできます。落とした。それ、どうやったら出来るの?
dropHandler: function () {
$('.canvas').append(new ButtonInCanvas({model: new ButtonWidget}).render().el);
}
(event, ui)
値を取得できるように上記の関数内を渡そうとしましたが、 ui.position.left
「Uncaught TypeError: Undefined のプロパティ 'position' を読み取れません」というメッセージが表示されます。この問題を回避するにはどうすればよいですか?
また、上記のコードでは、CanvasView
インスタンスの代わりにキャンバスのセレクターを使用しています。将来的に複数の が存在することを念頭に置いて、キャンバスのクラスを持つすべての DOM 要素ではなく、ウィジェットがそれにのみ追加されるようにCanvasView
、特定のインスタンスを関連付けるにはどうすればよいでしょうか?CanvasView
さらに重要なことは、Backbone を使用するのはこれが初めての試みであり、「ToDo」アプリとの共通点があまりないため、私の実装で致命的なエラーがあれば指摘してもらえますか? 私が間違っていること、またはより良い/より効率的な方法で行うことができたはずのこと