0

モデルのビューがあり、初期化で次のコードを使用します

initialize: function (){
        _.bindAll(this, 'render'); 
        this.listenTo(this.model, "change", this.render);
        this.$el.draggable({
            opacity: 0.5,
            containment: "parent"
        });
        this.$el.resizable();
        this.$el.selectable();
    },

ドラッグ可能は機能しますが、サイズ変更可能および選択可能は機能しません (動作するかどうかを確認するために他の jQuery UI インタラクションをテストしていません)。render 関数内に配置しようとしthis.$el.resizableましたが、それも機能しません。jQuery 1.8.3 と jQuery UI 1.9.2 を使用しています (HTML に必要な jquery-ui.css を含めています)。ビューがレンダリングされると、ブラウザで要素を調べます。実際には、想定どおりのクラスとクラスがui.draggable, ui.resizableありui.selectableますが、ドラッグすることしかできません。

この問題を回避しようとしてresize: both、サイズ変更したい要素のクラスで CSS3 プロパティを使用しましたが、問題なく動作しますが、サイズ変更に jQuery UI を利用したいのですが、なぜそれが勝ったのか知りたいです動作しません。

私が間違っているかもしれないアイデアはありますか?

編集: jsfiddle の例を追加http://jsfiddle.net/IgnorantUser/u7JkX/ButtonInCanvas説明されている問題は、バックボーン ビューの初期化にあります。

4

1 に答える 1

0

どうやら、ビューthis.$el.html(this.template(this.model.toJSON()));のレンダリング機能で使用すると問題が発生していたようです。ButtonInCanvas上記は、モデルの「キャプション」属性を取得し、それを html コンテンツとしてビューに渡します。

this.$el.html(this.template(this.model.toJSON()));解決策は、init 関数に入れることです。render 関数で行う必要がある場合は、モデルからキャプション プロパティを取得する、サイズを変更する div 内に別の div が必要です。次の JSBIN では、ボタン内の div を使用したソリューションを確認できます。(#jquery freenode IRC チャネルのユーザー shoky の実装と彼の頭に感謝します) http://jsbin.com/uxequq/1/edit

問題が発生した理由がよくわかりません (おそらくthis.template(this.model.toJSON())私のレンダリング関数で、ビューの再レンダリングが発生していたのでしょうか?) その理由を教えてください。さらに理解を深めるのに役立ちます!

乾杯!

于 2013-01-23T16:26:20.233 に答える