我创建了一个简单的骨干应用程序,效果很好。 现在我需要解决一个问题,我遇到了麻烦。所以我寻求建议。
我需要在每个用户/组的基础上以只读或可编辑的方式表示我的模型/集合。
我最初的想法是,创建两个模板(读取和编辑)及其各自的视图。 (伪码):
var appRouter = Backbone.Router.extend({
routes: {
'' : 'schedule',
}
schedule: function() {
this.collection = new Collection();
this.collection.fetch({success:function(resp) {
if (resp.group == 'allowedToEdit')
myview = new editView(this.collection);
else
myview = new readView(this.collection);
}});
});
这种方法最终让我不得不复制模板:
<script type="text/template" id="edit-template">
<div class="myclass">
<input class="fn" type="text" value="<%= (fn) != '' ? fn : 'default' %>">
</div>
</script>
<script type="text/template" id="static-template">
<div class="myclass">
<div class="fn"><%= fn %></div>
</div>
</script>
内联javascript选择input
或div
代码会不会更好?或者有一个更好的解决方案我没想到?
答案 0 :(得分:0)
这就是我最终做的事情:
我创建了一个用户模型,其中包含用户首选项和布尔值(如果允许用户编辑,则根据用户权限从数据库返回)。
结果代码是:
var appRouter = Backbone.Router.extend({
routes: {
'' : 'schedule',
}
schedule: function() {
this.collection = new Collection();
this.collection.fetch({
success:function(resp) {
myview = user.schedule() ? new editView(this.collection)
: new readView(this.collection);
myview.render();
}});
});
函数user.schedule()
只返回与请求的路由关联的布尔值。
后端的权限受组限制 - 因此,如果用户手动更改这些布尔值 要访问可编辑页面 - 他们仍然没有授权后端来操作数据。
另外,在我的例子中,可编辑/静态视图非常不同,因此我创建了两个单独的模板。