所以,我承认有人遵循我的设计和构建模式可能会很棘手。但我会尽力描述这个问题,虽然我觉得这可能比让你理解我的项目更容易:) 但是我花了 3 天时间试图解决这个问题。
技术布局总结
- 我有一个全局视图(让我们称之为
GV
全局视图),一切都通过这个模板。 - 我有导航,这可以在点击时调用 5 个单独的视图之一。
- 这些视图中的每一个首先使用相同的视图(
DV
对于 defaultView),然后扩展这个视图并从它自己的加载细节JST
(OV for OwnView) - 问题是,当单击加载 OV 时
element
,它必须加载到 (target
) 中的内容尚未呈现到页面。然而,它在 中可用DOM
,并且实际上DV
用它更新了 ,OV
但不会呈现到页面。
简要概述 - 让您了解我的视图是如何设置的以及扩展了什么
- GV - 加载:登录、主页、全局导航
- DV - 加载:此部分的导航。
- DV 扩展 GV:
SD.defaultView.extend
- DV 扩展 GV:
- OV - 加载:h2,选项图标和按钮
- 每个 OV 都扩展了 DV,这样我就可以将所有点击事件保存在一个视图中,而不必到处粘贴代码:
SD.defaultSexView.extend
- 每个 OV 都扩展了 DV,这样我就可以将所有点击事件保存在一个视图中,而不必到处粘贴代码:
问题
OV
加载到内部的元素中DV
。GV
并且DV
全部加载完美。我可以单击 from,login -> home -> navigation -> through
然后将其加载到DV
. 这就是交互分解的地方。加载的只是JST
for中的任何内容DV
建造
只是提供一些背景信息:
- 我正在使用
JST
's 来预编译我的所有模板。 main.js
通过 require 加载我的所有依赖项。它还处理我的路线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 - 这是第二个 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);
它确实会正确显示,但不会正确绑定任何事件。
抱歉,有这么多要吸收的东西,如果有人花时间阅读或理解这一点,我会非常非常印象深刻:)