构建一个browsergame我从PHP到JavaScript,我现在也想在服务器端使用它。 由于我要求用户使用JavaScript,我将广泛使用它。我想以面向对象的方式使用。
考虑到MVC,模型将在客户端和服务器端使用。视图仅在客户端使用。 界面分为多个部分:主要侧面菜单,主要内容和一些小部件。我将以我已经完成的部分为例: 菜单分为三个类别,包含多个条目。每个条目都是带有附加操作的链接(如切换内容)。
// menuview:
var self = new View();
var generalMenu = new MenuCategory('generalmenu')
.addEntry(new MenuEntry('overview', new Action()))
.addEntry(new MenuEntry('buildings'))
.addEntry(new MenuEntry('resources'))
// [..more categories..]
self.toData = function() {
return {
id: this.id,
cat: [generalMenu.toData(), infosMenu.toData(), userMenu.toData()]
};
};
目前,View是一个带有toData()方法的复合体,用于为模板解析器创建数据(自制,简单但支持迭代)。并且在创建之后附加了动作。我使用jQuery作为框架:
self.show = function(callback) {
$tpl(this.tpl).parse(this.toData()).lang('main').toHTML(function(html) {
var el = $(html);
el.find('a').click(function (e) {
MenuEntry.actionHandler.execAction(e.target.id);
return false;
});
el.appendTo('#'+self.target);
callback && callback();
});
return this;
};
我已经声明了一个动作处理程序,以避免迭代链接。
我对这个解决方案感觉不舒服,它不够灵活。我想将视图视为真实的组合,而不是许多奇怪的依赖。另外,如果我改变一个部分,我必须重新整理整个视图。好吧,在这个例子中,这并不明显,因为菜单在运行时不会改变,但界面的其他部分会。
现在,最后回答我的问题:有更好的解决方案吗? 就像在视图中传播dom引用一样,每个菜单都有它自己的引用和直接附加动作?如果我不再使用模板,我会失去什么样的灵活性?
答案 0 :(得分:1)
我决定不使用模板解析器。每个视图都存储它的节点,并且如果它被告知更新数据,则能够直接操作它。