1

dom要素のリストを次のようにバックボーンビューオブジェクトのプロパティとして定義しています。

el : $("body"),
elTicket : $('#ticket'),
...

ただし、これらのjqueryオブジェクトが指すDOMはまだ生成されていません。

この問題が発生したときに私が行っていたのは、jqueryオブジェクトを関数でラップし、次のように返すことでした。

el : function(){
    return $('body');
},
...

その結果、次のように醜い線になります。

this.el().append('dasd');

これに対するより良い解決策はありますか?

4

2 に答える 2

6

ドキュメントの例に示されているように、Backbone.Viewプロパティの値としてセレクター(jQueryオブジェクトではなく)を使用する必要があります。

App.MyView = Backbone.View.extend({
    el: 'body',
    elTicket: '#ticket',
    ...
});
于 2012-10-04T16:20:23.137 に答える
1

文脈を知らずに総合的な答えを出すのは難しいですが、別の角度から問題を見てみることをお勧めします。

bodyタグの場合は、bodyがDOMにロードされた後にコードを実行します。これを行うには、スクリプトタグをHTMLファイルの最後に配置するか、それらのifDocumentLoaded関数の1つを使用して、その中でバックボーンコードを呼び出します。

メインドキュメントがすでにロードされていて、質問の例としてbodyを選択した場合、代わりにタグがdivであるとしましょう。DOMにロードされていない要素に対してJQueryを呼び出すことができます。何が起こるかというと、JQueryがこの要素を作成しますが、それはDOMにアタッチされていません。後で機会があれば添付できます。おそらく$(body).append(this.el)のようなクエリメソッドを使用します。

elプロパティは、デフォルトでは、特定のビューに対応することが期待される単純な古いDOM要素であることに注意してください。だからあなたは持つことができます:

App.MyView = Backbone.View.extend({
    tagName: 'table', 
    ...   
});

自動的にApp.MyView.elにアクセスできます。これは、タグ名がテーブルである、接続されていないDOM要素になります。これで、このDOM要素にJqueryの魔法を適用したい場合は、App.MyView。$elからアクセスできます。

于 2012-10-04T16:42:57.293 に答える