为什么Django和AngularJS在实现小部件/指令时不遵循MVC模式?
Django和Angular以这种或那种方式跟随MVC。。模式,因此应该将HTML与代码分离 但在浏览Django源代码时,您可以轻松找到:为什么Django和AngularJS在实现小部件/指令时不遵循MVC模式?,django,model-view-controller,design-patterns,angularjs,Django,Model View Controller,Design Patterns,Angularjs,Django和Angular以这种或那种方式跟随MVC。。模式,因此应该将HTML与代码分离 但在浏览Django源代码时,您可以轻松找到: class ClearableFileInput(FileInput): .... template_with_initial = u'%(initial_text)s: %(initial)s %(clear_template)s<br />%(input_text)s: %(input)s' template_w
class ClearableFileInput(FileInput):
....
template_with_initial = u'%(initial_text)s: %(initial)s %(clear_template)s<br />%(input_text)s: %(input)s'
template_with_clear = u'%(clear)s <label for="%(clear_checkbox_id)s">%(clear_checkbox_label)s</label>'
而不是编写模板并使用上下文呈现它
或
而不是使用templatetags,或者使用外部模板
与AngularJS相同,在主页上的示例中,您可以找到:
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
},
template:
'<div class="tabbable">' +
'<ul class="nav nav-tabs">' +
'<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">'+
'<a href="" ng-click="select(pane)">{{pane.title}}</a>' +
'</li>' +
'</ul>' +
'<div class="tab-content" ng-transclude></div>' +
'</div>',
replace: true
不只是使用templateUrl和,而是将模板写入单独的文件中,而不是在代码中
有什么好的理由吗?或者其他合理的原因
我自己找不到,在编写小部件/指令时,我设法将html从代码中分离出来,一切都按预期进行。这显然是一种糟糕的模式;在django的例子中,有人试图在GSoC项目中修复它,但这很困难,因为django模板速度慢,简单的字符串格式快得多,使用模板渲染字段被证明是一个真正的瓶颈。as_表看起来像是保留在源代码中用于向后兼容的剩余内容;开发人员不需要使用它
我没有使用AngularJS的经验,但可能是单独文件中的模板意味着额外的HTTP请求。作为一个示例,如果所有代码都捆绑在一起,看起来更清晰。这里只有一些例子。@asgoth我认为把html放在javascript字符串中从来都不清楚,但是谢谢你的评论。我知道你的意思。我只是想展示一个特定功能的小例子,有时最好让它一起查看,否则学习曲线可能会更难。我同意这不应该用于生产代码。是的,在angular中,这意味着一个额外的HTTP请求,但他们的框架就是这样工作的,并且总是可以像GWT一样在第一页加载时加载所有视图来避免它。关于django,对于非常简单的小部件,我看到了如何将html编写为字符串,但在尝试编写更复杂的小部件时,这是不可能的。
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
},
template:
'<div class="tabbable">' +
'<ul class="nav nav-tabs">' +
'<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">'+
'<a href="" ng-click="select(pane)">{{pane.title}}</a>' +
'</li>' +
'</ul>' +
'<div class="tab-content" ng-transclude></div>' +
'</div>',
replace: true