ですから、誰かが私のデザインに従ってパターンを構築するのは難しいかもしれないことを認めます。しかし、私は問題を説明するために最善を尽くしますが、これは私のプロジェクトを理解してもらうよりも簡単かもしれません:)しかし、私はこれを理解しようとして3日を費やしました.
テクニカルレイアウトのまとめ
- 私はグローバル ビューを持っています (グローバル ビューの場合は this と呼びましょ
GVう)、すべてがこのテンプレートを通過します。 - ナビゲーションがあります。クリックすると、5 つの個別のビューのいずれかを呼び出すことができます。
- これらの各ビューは、最初に同じビュー (
DVdefaultView の場合) を使用し、次にこのビューを拡張して独自のビューJST(OwnView の OV)から詳細をロードします。 - 問題は、クリックして OV をロードするときに、ロードする
elementようにバインドされている (target) がまだページにレンダリングされていないことです。ただし、 で使用でき、DOM実際には を更新しDVますOVが、ページにはレンダリングしません。
簡単な概要 - ビューがどのように設定され、何が拡張されているかを理解する
- GV - 読み込み: ログイン、ホーム、グローバル ナビゲーション
- DV - 負荷: このセクションのナビゲーション。
- DV は GV を拡張します。
SD.defaultView.extend
- DV は GV を拡張します。
- OV - 負荷: h2、オプションとボタンのアイコン
- 各 OV は DV を拡張するので、すべてのクリック イベントを 1 つのビューに保持でき、コードを全体に貼り付ける必要はありません。
SD.defaultSexView.extend
- 各 OV は DV を拡張するので、すべてのクリック イベントを 1 つのビューに保持でき、コードを全体に貼り付ける必要はありません。
問題
OV内にある要素に読み込まれますDV。すべてが完全に読み込まGVれます。DVからクリックするlogin -> home -> navigation -> throughと、DV. ここで相互作用が崩壊します。ロードされるのは for の中にあったものだけJSTですDV
建てる
背景情報を提供するだけです:
- を使用して
JST、すべてのテンプレートをプリコンパイルしています。 main.jsrequire を介してすべての依存関係をロードします。私のルートも処理しますsdFunctions.jsグローバルやその他の重要なものがあります。しかし、最も重要なのは 2 つのグローバル デフォルト ビューです。- 1:
GVすべてが最初に通過する - 2:
DVすべてのオプションが通過する (メインのナビゲーション メニュー)
- 1:
概要
OVロードするには、ロード先の要素が利用可能でなければならないことを知っています。これはel: 'sexdetails'。この要素は からロードされますDV。したがって、ロードDVするにはDOMにある必要があることに気づきました。OVそれ以外の場合は、ロードする要素がありません。
これはコンソール ロードです。pageは からGV sexdetailsロードされ、DVこれはOVがロードされる場所です。これらのコンソールはすべてロード順に出力されます。というわけで上から下へ。
一番下は最後のconsole.logに見られるようで、elementすべて正しい情報で構築されているためグレー表示されています。しかし、何らかの理由でページに出力されません。
JS
今、エキサイティングな部分:p
DV - これは 2 番目の defaultView で、メニューを処理し、クリック イベントがバインドされる場所です。
SD.defaultSexView = function(){
//set up homeview
var sexView = SD.defaultView.extend({
el: 'page',
jstemplate: JST['app/www/js/templates/sex/sexTemplate.ejs'],
events:{
"click sexoptions > *" : 'changeSex'
},
changeSex: function(elem){
var me = elem.currentTarget.localName;
$('.selected').removeClass('selected');// #update selected from bottom navigation
$(me).addClass('selected');
SD.pageLoad(elem); // #Call function that will re-render the page
},
render: function () {
var compiled = this.jstemplate();
this.$el.html(compiled);
}
});
SD.DSV = new sexView();
SD.DSV.render();
return sexView;
}();
自分のビュー - 5 つのファイルのそれぞれに、これらのいずれかがあります。
//set up homeview
var wank = SD.defaultSexView.extend({
el: 'sexdetails',
jstemplate: JST['app/www/js/templates/sex.ejs'],
data: {
url: SD.HTTP+'stats/add',
sextype: 'wank',
header: 'SOME LOUD STRING!!!',
image: '/img/path.jpg'
},
render: function () {
c($('sexdetails'));
c(this.$el);
var compiled = this.jstemplate(this.data);
this.$el.html(compiled);
}
});
return wank;
完全に機能するすべてのコードは、http: //m.sexdiaries.co.uk/にあります。URL に惑わされないでください。SFW であることを保証します。すべてが漫画で行われ、大雑把ではありません。
興味深いことに、使用するコードを更新する$('sexdetails').html(compiled);と、実際には正しく表示されますが、どのイベントも正しくバインドされません。
申し訳ありませんが、取り入れるべきことがたくさんあります.